001
014
015 package com.liferay.portlet.shopping.action;
016
017 import com.liferay.portal.kernel.servlet.SessionErrors;
018 import com.liferay.portal.kernel.upload.UploadPortletRequest;
019 import com.liferay.portal.kernel.util.Constants;
020 import com.liferay.portal.kernel.util.ParamUtil;
021 import com.liferay.portal.kernel.util.Validator;
022 import com.liferay.portal.security.auth.PrincipalException;
023 import com.liferay.portal.service.ServiceContext;
024 import com.liferay.portal.service.ServiceContextFactory;
025 import com.liferay.portal.struts.PortletAction;
026 import com.liferay.portal.theme.ThemeDisplay;
027 import com.liferay.portal.util.PortalUtil;
028 import com.liferay.portal.util.WebKeys;
029 import com.liferay.portlet.shopping.DuplicateItemFieldNameException;
030 import com.liferay.portlet.shopping.DuplicateItemSKUException;
031 import com.liferay.portlet.shopping.ItemLargeImageNameException;
032 import com.liferay.portlet.shopping.ItemLargeImageSizeException;
033 import com.liferay.portlet.shopping.ItemMediumImageNameException;
034 import com.liferay.portlet.shopping.ItemMediumImageSizeException;
035 import com.liferay.portlet.shopping.ItemNameException;
036 import com.liferay.portlet.shopping.ItemSKUException;
037 import com.liferay.portlet.shopping.ItemSmallImageNameException;
038 import com.liferay.portlet.shopping.ItemSmallImageSizeException;
039 import com.liferay.portlet.shopping.NoSuchCategoryException;
040 import com.liferay.portlet.shopping.NoSuchItemException;
041 import com.liferay.portlet.shopping.model.ShoppingItem;
042 import com.liferay.portlet.shopping.model.ShoppingItemField;
043 import com.liferay.portlet.shopping.model.ShoppingItemPrice;
044 import com.liferay.portlet.shopping.model.ShoppingItemPriceConstants;
045 import com.liferay.portlet.shopping.model.impl.ShoppingItemImpl;
046 import com.liferay.portlet.shopping.service.ShoppingItemServiceUtil;
047 import com.liferay.portlet.shopping.service.persistence.ShoppingItemFieldUtil;
048 import com.liferay.portlet.shopping.service.persistence.ShoppingItemPriceUtil;
049
050 import java.io.File;
051
052 import java.util.ArrayList;
053 import java.util.List;
054
055 import javax.portlet.ActionRequest;
056 import javax.portlet.ActionResponse;
057 import javax.portlet.PortletConfig;
058 import javax.portlet.RenderRequest;
059 import javax.portlet.RenderResponse;
060
061 import org.apache.struts.action.ActionForm;
062 import org.apache.struts.action.ActionForward;
063 import org.apache.struts.action.ActionMapping;
064
065
068 public class EditItemAction extends PortletAction {
069
070 @Override
071 public void processAction(
072 ActionMapping actionMapping, ActionForm actionForm,
073 PortletConfig portletConfig, ActionRequest actionRequest,
074 ActionResponse actionResponse)
075 throws Exception {
076
077 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
078
079 try {
080 if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
081 updateItem(actionRequest);
082 }
083 else if (cmd.equals(Constants.DELETE)) {
084 deleteItem(actionRequest);
085 }
086
087 if (Validator.isNotNull(cmd)) {
088 sendRedirect(actionRequest, actionResponse);
089 }
090 }
091 catch (Exception e) {
092 if (e instanceof NoSuchCategoryException ||
093 e instanceof NoSuchItemException ||
094 e instanceof PrincipalException) {
095
096 SessionErrors.add(actionRequest, e.getClass());
097
098 setForward(actionRequest, "portlet.shopping.error");
099 }
100 else if (e instanceof DuplicateItemFieldNameException ||
101 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(), e);
112 }
113 else {
114 throw e;
115 }
116 }
117 }
118
119 @Override
120 public ActionForward render(
121 ActionMapping actionMapping, ActionForm actionForm,
122 PortletConfig portletConfig, RenderRequest renderRequest,
123 RenderResponse renderResponse)
124 throws Exception {
125
126 try {
127 ActionUtil.getItem(renderRequest);
128 }
129 catch (Exception e) {
130 if (e instanceof NoSuchItemException ||
131 e instanceof PrincipalException) {
132
133 SessionErrors.add(renderRequest, e.getClass());
134
135 return actionMapping.findForward("portlet.shopping.error");
136 }
137 else {
138 throw e;
139 }
140 }
141
142 return actionMapping.findForward(
143 getForward(renderRequest, "portlet.shopping.edit_item"));
144 }
145
146 protected void deleteItem(ActionRequest actionRequest) throws Exception {
147 long itemId = ParamUtil.getLong(actionRequest, "itemId");
148
149 ShoppingItemServiceUtil.deleteItem(itemId);
150 }
151
152 protected void updateItem(ActionRequest actionRequest) throws Exception {
153 UploadPortletRequest uploadPortletRequest =
154 PortalUtil.getUploadPortletRequest(actionRequest);
155
156 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
157 WebKeys.THEME_DISPLAY);
158
159 long itemId = ParamUtil.getLong(uploadPortletRequest, "itemId");
160
161 long groupId = themeDisplay.getScopeGroupId();
162 long categoryId = ParamUtil.getLong(uploadPortletRequest, "categoryId");
163 String sku = ParamUtil.getString(uploadPortletRequest, "sku");
164 String name = ParamUtil.getString(uploadPortletRequest, "name");
165 String description = ParamUtil.getString(
166 uploadPortletRequest, "description");
167 String properties = ParamUtil.getString(
168 uploadPortletRequest, "properties");
169
170 int fieldsCount = ParamUtil.getInteger(
171 uploadPortletRequest, "fieldsCount", 1);
172
173 List<ShoppingItemField> itemFields = new ArrayList<>();
174
175 for (int i = 0; i < fieldsCount; i ++) {
176 String fieldName = ParamUtil.getString(
177 uploadPortletRequest, "fieldName" + i);
178 String fieldValues = ParamUtil.getString(
179 uploadPortletRequest, "fieldValues" + i);
180 String fieldDescription = ParamUtil.getString(
181 uploadPortletRequest, "fieldDescription" + i);
182
183 ShoppingItemField itemField = ShoppingItemFieldUtil.create(0);
184
185 itemField.setName(fieldName);
186 itemField.setValues(fieldValues);
187 itemField.setDescription(fieldDescription);
188
189 itemFields.add(itemField);
190 }
191
192 String fieldsQuantities = ParamUtil.getString(
193 uploadPortletRequest, "fieldsQuantities");
194
195 int pricesCount = ParamUtil.getInteger(
196 uploadPortletRequest, "pricesCount", 1);
197
198 List<ShoppingItemPrice> itemPrices = new ArrayList<>();
199
200 for (int i = 0; i < pricesCount; i ++) {
201 int minQuantity = ParamUtil.getInteger(
202 uploadPortletRequest, "minQuantity" + i);
203 int maxQuantity = ParamUtil.getInteger(
204 uploadPortletRequest, "maxQuantity" + i);
205 double price = ParamUtil.getDouble(
206 uploadPortletRequest, "price" + i, themeDisplay.getLocale());
207
208 double discount = ParamUtil.getDouble(
209 uploadPortletRequest, "discount" + i, themeDisplay.getLocale());
210
211 discount = discount / 100;
212
213 boolean taxable = ParamUtil.getBoolean(
214 uploadPortletRequest, "taxable" + i);
215 double shipping = ParamUtil.getDouble(
216 uploadPortletRequest, "shipping" + i, themeDisplay.getLocale());
217 boolean useShippingFormula = ParamUtil.getBoolean(
218 uploadPortletRequest, "useShippingFormula" + i);
219 boolean active = ParamUtil.getBoolean(
220 uploadPortletRequest, "active" + i);
221 int defaultPrice = ParamUtil.getInteger(
222 uploadPortletRequest, "defaultPrice");
223
224 int status = ShoppingItemPriceConstants.STATUS_ACTIVE_DEFAULT;
225
226 if ((defaultPrice != i) && active) {
227 status = ShoppingItemPriceConstants.STATUS_ACTIVE;
228 }
229 else if ((defaultPrice != i) && !active) {
230 status = ShoppingItemPriceConstants.STATUS_INACTIVE;
231 }
232
233 ShoppingItemPrice itemPrice = ShoppingItemPriceUtil.create(0);
234
235 itemPrice.setMinQuantity(minQuantity);
236 itemPrice.setMaxQuantity(maxQuantity);
237 itemPrice.setPrice(price);
238 itemPrice.setDiscount(discount);
239 itemPrice.setTaxable(taxable);
240 itemPrice.setShipping(shipping);
241 itemPrice.setUseShippingFormula(useShippingFormula);
242 itemPrice.setStatus(status);
243
244 itemPrices.add(itemPrice);
245 }
246
247 boolean requiresShipping = ParamUtil.getBoolean(
248 uploadPortletRequest, "requiresShipping");
249
250 int stockQuantity = ParamUtil.getInteger(
251 uploadPortletRequest, "stockQuantity");
252
253 if (ParamUtil.getBoolean(uploadPortletRequest, "infiniteStock")) {
254 stockQuantity = ShoppingItemImpl.STOCK_QUANTITY_INFINITE_STOCK;
255 }
256
257 boolean featured = ParamUtil.getBoolean(
258 uploadPortletRequest, "featured");
259 Boolean sale = null;
260
261 boolean smallImage = ParamUtil.getBoolean(
262 uploadPortletRequest, "smallImage");
263 String smallImageURL = ParamUtil.getString(
264 uploadPortletRequest, "smallImageURL");
265 File smallFile = uploadPortletRequest.getFile("smallFile");
266
267 boolean mediumImage = ParamUtil.getBoolean(
268 uploadPortletRequest, "mediumImage");
269 String mediumImageURL = ParamUtil.getString(
270 uploadPortletRequest, "mediumImageURL");
271 File mediumFile = uploadPortletRequest.getFile("mediumFile");
272
273 boolean largeImage = ParamUtil.getBoolean(
274 uploadPortletRequest, "largeImage");
275 String largeImageURL = ParamUtil.getString(
276 uploadPortletRequest, "largeImageURL");
277 File largeFile = uploadPortletRequest.getFile("largeFile");
278
279 ServiceContext serviceContext = ServiceContextFactory.getInstance(
280 ShoppingItem.class.getName(), actionRequest);
281
282 if (itemId <= 0) {
283
284
285
286 ShoppingItemServiceUtil.addItem(
287 groupId, categoryId, sku, name, description, properties,
288 fieldsQuantities, requiresShipping, stockQuantity, featured,
289 sale, smallImage, smallImageURL, smallFile, mediumImage,
290 mediumImageURL, mediumFile, largeImage, largeImageURL,
291 largeFile, itemFields, itemPrices, serviceContext);
292 }
293 else {
294
295
296
297 ShoppingItemServiceUtil.updateItem(
298 itemId, groupId, categoryId, sku, name, description, properties,
299 fieldsQuantities, requiresShipping, stockQuantity, featured,
300 sale, smallImage, smallImageURL, smallFile, mediumImage,
301 mediumImageURL, mediumFile, largeImage, largeImageURL,
302 largeFile, itemFields, itemPrices, serviceContext);
303 }
304 }
305
306 }