blob: 58e99b5e6fa7e8ff3f9b12ed00c0af5454aca338 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.ofbiz.ebaystore;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.UtilGenerics;
import org.apache.ofbiz.base.util.UtilHttp;
import org.apache.ofbiz.base.util.UtilMisc;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.entity.GenericEntityException;
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.service.GenericServiceException;
import org.apache.ofbiz.service.LocalDispatcher;
import com.ebay.sdk.ApiContext;
import com.ebay.sdk.ApiException;
import com.ebay.sdk.SdkException;
import com.ebay.sdk.call.AddItemCall;
import com.ebay.sdk.call.GetCategorySpecificsCall;
import com.ebay.sdk.call.GetSellingManagerInventoryCall;
import com.ebay.sdk.call.ReviseSellingManagerProductCall;
import com.ebay.sdk.call.VerifyAddItemCall;
import com.ebay.soap.eBLBaseComponents.AmountType;
import com.ebay.soap.eBLBaseComponents.CategoryType;
import com.ebay.soap.eBLBaseComponents.CountryCodeType;
import com.ebay.soap.eBLBaseComponents.CurrencyCodeType;
import com.ebay.soap.eBLBaseComponents.DetailLevelCodeType;
import com.ebay.soap.eBLBaseComponents.FeeType;
import com.ebay.soap.eBLBaseComponents.FeesType;
import com.ebay.soap.eBLBaseComponents.GetSellingManagerInventoryRequestType;
import com.ebay.soap.eBLBaseComponents.GetSellingManagerInventoryResponseType;
import com.ebay.soap.eBLBaseComponents.ItemType;
import com.ebay.soap.eBLBaseComponents.ListingDesignerType;
import com.ebay.soap.eBLBaseComponents.ListingTypeCodeType;
import com.ebay.soap.eBLBaseComponents.NameRecommendationType;
import com.ebay.soap.eBLBaseComponents.NameValueListArrayType;
import com.ebay.soap.eBLBaseComponents.NameValueListType;
import com.ebay.soap.eBLBaseComponents.PictureDetailsType;
import com.ebay.soap.eBLBaseComponents.RecommendationsType;
import com.ebay.soap.eBLBaseComponents.ReturnPolicyType;
import com.ebay.soap.eBLBaseComponents.ReviseSellingManagerProductRequestType;
import com.ebay.soap.eBLBaseComponents.ReviseSellingManagerProductResponseType;
import com.ebay.soap.eBLBaseComponents.SellingManagerProductDetailsType;
import com.ebay.soap.eBLBaseComponents.SellingManagerProductType;
import com.ebay.soap.eBLBaseComponents.ShippingDetailsType;
import com.ebay.soap.eBLBaseComponents.ShippingServiceDetailsType;
import com.ebay.soap.eBLBaseComponents.ShippingServiceOptionsType;
import com.ebay.soap.eBLBaseComponents.ShippingTypeCodeType;
import com.ebay.soap.eBLBaseComponents.SiteCodeType;
import com.ebay.soap.eBLBaseComponents.StoreCustomCategoryType;
import com.ebay.soap.eBLBaseComponents.StorefrontType;
import com.ebay.soap.eBLBaseComponents.VATDetailsType;
import com.ebay.soap.eBLBaseComponents.ValueRecommendationType;
import com.ebay.soap.eBLBaseComponents.VerifyAddItemRequestType;
import com.ebay.soap.eBLBaseComponents.VerifyAddItemResponseType;
import com.ebay.soap.eBLBaseComponents.WarningLevelCodeType;
import com.ebay.soap.eBLBaseComponents.AddItemRequestType;
import com.ebay.soap.eBLBaseComponents.AddItemResponseType;
public class EbayEvents {
private static final int SHIPPING_SERVICE_ID_LIMIT = 50000;
public static final String module = EbayEvents.class.getName();
public static String sendLeaveFeedback(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(true);
LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
Map<String, Object> requestParams = UtilHttp.getParameterMap(request);
GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
int feedbackSize = Integer.parseInt((String)requestParams.get("feedbackSize"));
String productStoreId = (String)requestParams.get("productStoreId");
for (int i = 1; i <= feedbackSize; i++) {
String commentType = (String)requestParams.get("commentType"+i);
String commentText = (String)requestParams.get("commentText"+i);
if (!commentType.equals("none") && commentText != null) {
String itemId = (String)requestParams.get("itemId"+i);
String transactionId = (String)requestParams.get("transactionId"+i);
String targetUser = (String)requestParams.get("targetUser"+i);
String commentingUser = (String)requestParams.get("commentingUser"+i);
String role = (String)requestParams.get("role"+i);
String ratingItem = (String)requestParams.get("ratingItem"+i);
String ratingComm = (String)requestParams.get("ratingComm"+i);
String ratingShip = (String)requestParams.get("ratingShip"+i);
String ratingShipHand = (String)requestParams.get("ratingShipHand"+i);
String AqItemAsDescribedId = (String)requestParams.get("AqItemAsDescribedId"+i);
Map<String, Object> leavefeedback = new HashMap<String, Object>();
leavefeedback.put("productStoreId", productStoreId);
leavefeedback.put("userLogin", userLogin);
leavefeedback.put("itemId", itemId);
leavefeedback.put("transactionId", transactionId);
leavefeedback.put("targetUser", targetUser);
leavefeedback.put("commentingUser", commentingUser);
leavefeedback.put("role", role);
leavefeedback.put("commentText", commentText);
leavefeedback.put("commentType", commentType);
leavefeedback.put("ratingItem", ratingItem);
leavefeedback.put("ratingComm", ratingComm);
leavefeedback.put("ratingShip", ratingShip);
leavefeedback.put("ratingShipHand", ratingShipHand);
leavefeedback.put("AqItemAsDescribedId", AqItemAsDescribedId);
// Call service
try {
dispatcher.runSync("leaveFeedback", leavefeedback);
} catch (GenericServiceException e) {
Debug.logError(e, module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
return "error";
}
}
}
return "success";
}
/* event to add products to prepare create & export listing */
public static String addProductListing(HttpServletRequest request, HttpServletResponse response) {
Delegator delegator = (Delegator) request.getAttribute("delegator");
Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
Locale locale = UtilHttp.getLocale(request);
if (UtilValidate.isEmpty(requestParams.get("productStoreId"))) {
request.setAttribute("_ERROR_MESSAGE_","Required productStoreId and selected products.");
return "error";
}
List<String> productIds = UtilGenerics.checkList(requestParams.get("productIds"));
if (UtilValidate.isNotEmpty(requestParams.get("productIds"))) {
productIds = UtilGenerics.checkList(requestParams.get("productIds"));
} else if (UtilValidate.isNotEmpty(requestParams.get("selectResult"))) {
try {
productIds = UtilGenerics.checkList(requestParams.get("selectResult"));
} catch (ClassCastException e) {
if (UtilValidate.isEmpty(productIds)) productIds = new LinkedList<String>();
productIds.add((String) requestParams.get("selectResult"));
}
} else {
request.setAttribute("_ERROR_MESSAGE_","Required productStoreId and selected products.");
return "error";
}
String productStoreId = (String) requestParams.get("productStoreId");
ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
//String webSiteUrl = (String) requestParams.get("webSiteUrl");
String webSiteUrl = "http://demo-trunk.ofbiz.apache.org";
Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
List<Map<String,Object>> itemObjs = null;
if (UtilValidate.isNotEmpty(addItemObject.get("itemListings"))) {
itemObjs = UtilGenerics.checkList(addItemObject.get("itemListings"));
} else {
itemObjs = new LinkedList<Map<String,Object>>();
}
if (UtilValidate.isNotEmpty(productIds)) {
try {
// check add new product obj ? to export
for (String productId : productIds) {
for (Map<String,Object> itObj : itemObjs) {
if (UtilValidate.isNotEmpty(itObj.get(productId.concat("_Obj")))) {
productIds.remove(productId);
}
}
}
Debug.logInfo("run in with productIds "+productIds, module);
for (String productId : productIds) {
AddItemCall addItemCall = new AddItemCall(apiContext);
ItemType item = new ItemType();
GenericValue product = EntityQuery.use(delegator).from("Product").where("productId", productId).queryOne();
item.setTitle(product.getString("internalName"));
item.setCurrency(CurrencyCodeType.USD);
String productDescription = "";
String description = product.getString("description");
String longDescription = product.getString("longDescription");
if (UtilValidate.isNotEmpty(description)) {
productDescription = description;
} else if (UtilValidate.isNotEmpty(longDescription)) {
productDescription = longDescription;
} else if (UtilValidate.isNotEmpty(product.getString("productName"))) {
productDescription = product.getString("productName");
}
item.setDescription(productDescription);
item.setSKU(product.getString("productId"));
item.setApplicationData(product.getString("productId"));
item.setCountry(CountryCodeType.US);
item.setQuantity(1);
String smallImage = product.getString("smallImageUrl");
String mediumImage = product.getString("mediumImageUrl");
String largeImage = product.getString("largeImageUrl");
String ebayImage = null;
if (UtilValidate.isNotEmpty(largeImage)) {
ebayImage = largeImage;
} else if (UtilValidate.isNotEmpty(mediumImage)) {
ebayImage = mediumImage;
} else if (UtilValidate.isNotEmpty(smallImage)) {
ebayImage = smallImage;
}
if (UtilValidate.isNotEmpty(ebayImage)) {
PictureDetailsType pic = new PictureDetailsType();
String pictureUrl = webSiteUrl + ebayImage;
String[] picURL = new String[1];
picURL[0] = pictureUrl;
//String[] picURL = {webSiteUrl + ebayImage};
//pic.setPictureURL(picURL);
pic.setPictureURL(picURL);
item.setPictureDetails(pic);
}
item.setCategoryMappingAllowed(true);
item.setSite(apiContext.getSite());
addItemCall.setSite(apiContext.getSite());
addItemCall.setItem(item);
addItemCall.setWarningLevel(WarningLevelCodeType.HIGH);
Map<String,Object> itemListing = null;
for (Map<String,Object> itemObj : itemObjs) {
if (UtilValidate.isNotEmpty(itemObj.get(productId.concat("_Obj")))) {
itemListing = UtilGenerics.checkMap(itemObj.get(productId.concat("_Obj")));
itemListing.put("addItemCall", addItemCall);
itemListing.put("productId", productId);
break;
}
}
if (UtilValidate.isEmpty(itemListing)) {
itemListing = new HashMap<String, Object>();
itemListing.put("addItemCall", addItemCall);
itemListing.put("productId", productId);
}
itemObjs.add(itemListing);
}
addItemObject.put("itemListing", itemObjs);
} catch (Exception e) {
Debug.logError(e.getMessage(), module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
return "error";
}
}
return "success";
}
public static String prepareEbaySiteFacadeObject(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(true);
if (request.getParameter("productStoreId") == null) {
return "error";
}
ApiContext apiContext = getApiContext(request);
try {
if (UtilValidate.isNotEmpty(apiContext)) {
String siteCode = apiContext.getSite().name();
if (UtilValidate.isNotEmpty(session.getAttribute("itemListings_".concat(siteCode)))) {
request.setAttribute("productStoreId", request.getParameter("productStoreId"));
return "prepare";
}
getSiteFacade(apiContext,request);
} else {
request.setAttribute("_ERROR_MESSAGE_","No apiContext for this account or this site please register on ebay or check you user account.");
return "error";
}
} catch (ApiException e) {
request.setAttribute("_ERROR_MESSAGE_","ApiException ".concat(e.getMessage()));
return "error";
} catch (SdkException e) {
request.setAttribute("_ERROR_MESSAGE_","SdkException ".concat(e.getMessage()));
return "error";
} catch (Exception e) {
request.setAttribute("_ERROR_MESSAGE_","Exception ".concat(e.getMessage()));
return "error";
}
return "success";
}
public static EbayStoreSiteFacade getSiteFacade(ApiContext apiContext, HttpServletRequest request) throws ApiException, SdkException, Exception{
String siteFacadeName = null;
EbayStoreSiteFacade siteFacade = null;
if (request.getParameter("productStoreId") == null) {
Debug.logError("Required productStoreId for get ebay information.", module);
return siteFacade;
}
HttpSession session = request.getSession(true);
if (UtilValidate.isNotEmpty(apiContext)) {
siteFacadeName = "siteFacade".concat("_".concat(apiContext.getSite().name()));
}
if (UtilValidate.isEmpty(session.getAttribute(siteFacadeName))) {
session.setAttribute(siteFacadeName,new EbayStoreSiteFacade(apiContext));
if (UtilValidate.isNotEmpty(session.getAttribute(siteFacadeName))) {
siteFacade = (EbayStoreSiteFacade)session.getAttribute(siteFacadeName);
}
} else {
siteFacade = (EbayStoreSiteFacade)session.getAttribute(siteFacadeName);
}
Debug.logInfo("loaded session for ebay site Facade is ".concat(siteFacadeName).concat(session.getAttribute(siteFacadeName).toString()),module);
return siteFacade;
}
public static ApiContext getApiContext(HttpServletRequest request) {
Locale locale = UtilHttp.getLocale(request);
Delegator delegator = (Delegator) request.getAttribute("delegator");
if (request.getParameter("productStoreId") == null && request.getAttribute("productStoreId") == null) {
Debug.logError("Required productStoreId for get ebay API config data.", module);
return null;
}
ApiContext apiContext = EbayStoreHelper.getApiContext(request.getParameter("productStoreId") != null ? request.getParameter("productStoreId"):(String)request.getAttribute("productStoreId"), locale, delegator);
return apiContext;
}
public static String clearProductListing(HttpServletRequest request, HttpServletResponse response) {
removeItemListingObject(request, getApiContext(request));
return "success";
}
public static void removeItemListingObject(HttpServletRequest request, ApiContext apiContext) {
HttpSession session = request.getSession(true);
String siteCode = apiContext.getSite().name();
Map<String,Object> addItemObject = UtilGenerics.checkMap(session.getAttribute("itemListings_".concat(siteCode)));
if (UtilValidate.isNotEmpty(addItemObject)) {
session.removeAttribute("itemListings_".concat(siteCode));
}
}
public static Map<String,Object> getAddItemListingObject(HttpServletRequest request, ApiContext apiContext) {
String siteCode = apiContext.getSite().name();
Map<String,Object> addItemObject = UtilGenerics.checkMap(request.getAttribute("itemListings_".concat(siteCode)));
HttpSession session = request.getSession(true);
if (addItemObject == null) {
addItemObject = UtilGenerics.checkMap(session.getAttribute("itemListings_".concat(siteCode)));
} else {
session.setAttribute("itemListings_".concat(siteCode), addItemObject);
}
if (addItemObject == null) {
addItemObject = new HashMap<String, Object>();
session.setAttribute("itemListings_".concat(siteCode), addItemObject);
}
return addItemObject;
}
// make ebay category list
public static List<CategoryType> getChildCategories(HttpServletRequest request) throws ApiException, SdkException, Exception{
List<CategoryType> categories = new LinkedList<CategoryType>();
EbayStoreSiteFacade sf = null;
String categoryId = null;
if (request.getParameter("productStoreId") == null && request.getAttribute("productStoreId") == null) {
Debug.logError("Required productStoreId for get ebay LeafCategories.", module);
return categories;
}
if (request.getParameter("categoryId") != null || request.getAttribute("categoryId") != null) {
categoryId = request.getParameter("categoryId") != null ? request.getParameter("categoryId") : (String) request.getAttribute("categoryId");
Debug.logInfo("Load child categories from session following site id and categoryId is ".concat(categoryId), module);
} else {
Debug.logWarning("No categoryId to get child categories.", module);
}
ApiContext apiContext = getApiContext(request);
sf = getSiteFacade(apiContext,request);
if (UtilValidate.isNotEmpty(sf)) {
Map<SiteCodeType, List<CategoryType>> csCateMaps = sf.getSiteCategoriesCSMap();
List<CategoryType> csCateList = csCateMaps.get(apiContext.getSite());
if (UtilValidate.isNotEmpty(csCateList)) {
if (UtilValidate.isNotEmpty(categoryId)) {
// find child of selected ebay categories
for (CategoryType csCate : csCateList) {
String[] categoryParentIds = csCate.getCategoryParentID();
for (String categoryParentId : categoryParentIds) {
if (categoryId.equals(categoryParentId)) {
categories.add(csCate);
}
}
}
} else {
// find first level of ebay categories
for (CategoryType csCate : csCateList) {
String[] categoryParentIds = csCate.getCategoryParentID();
for (String categoryParentId : categoryParentIds) {
if (csCate.getCategoryID().equals(categoryParentId)) {
categories.add(csCate);
}
}
}
}
//sort the cats list
Collections.sort(categories, new Comparator<Object>() {
public int compare(Object a, Object b) {
CategoryType cat1 = (CategoryType)a;
CategoryType cat2 = (CategoryType)b;
int catId1 = Integer.parseInt(cat1.getCategoryID());
int catId2 = Integer.parseInt(cat2.getCategoryID());
return catId1 - catId2;
}
});
}
}
return categories;
}
public static List<StoreCustomCategoryType> getStoreChildCategories(HttpServletRequest request) throws ApiException, SdkException, Exception {
List<StoreCustomCategoryType> categories = new LinkedList<StoreCustomCategoryType>();
List<StoreCustomCategoryType> csCateList = new LinkedList<StoreCustomCategoryType>();
EbayStoreSiteFacade sf = null;
String categoryId = null;
if (UtilValidate.isEmpty(request.getParameter("productStoreId")) && UtilValidate.isEmpty(request.getAttribute("productStoreId"))) {
Debug.logError("Required productStoreId for get ebay LeafCategories.", module);
return categories;
}
if (UtilValidate.isNotEmpty(request.getParameter("categoryId")) || UtilValidate.isNotEmpty(request.getAttribute("categoryId"))) {
categoryId = request.getParameter("categoryId") != null ? request.getParameter("categoryId") : (String) request.getAttribute("categoryId");
Debug.logInfo("Load child categories from session following site id and categoryId is ".concat(categoryId), module);
} else {
Debug.logWarning("No categoryId to get child categories.", module);
}
ApiContext apiContext = getApiContext(request);
sf = getSiteFacade(apiContext,request);
if (UtilValidate.isNotEmpty(sf)) {
Map<SiteCodeType, List<StoreCustomCategoryType>> csCateMaps = sf.getSiteStoreCategoriesMap();
csCateList = csCateMaps.get(apiContext.getSite());
if (UtilValidate.isNotEmpty(csCateList)) {
if (UtilValidate.isNotEmpty(categoryId)) {
// find child of selected ebay categories
for (StoreCustomCategoryType csCate : csCateList) {
if (categoryId.equals(String.valueOf(csCate.getCategoryID()))) {
StoreCustomCategoryType [] childCategories = csCate.getChildCategory();
for (StoreCustomCategoryType childCategoryId : childCategories) {
categories.add(childCategoryId);
}
}
}
} else {
// find first level of ebay categories
for (StoreCustomCategoryType csCate : csCateList) {
categories.add(csCate);
}
}
//sort the cats list
Collections.sort(categories, new Comparator<Object>() {
public int compare(Object a, Object b) {
StoreCustomCategoryType cat1 = (StoreCustomCategoryType) a;
StoreCustomCategoryType cat2 = (StoreCustomCategoryType) b;
int catId1 = Integer.parseInt(Long.toString(cat1.getCategoryID()));
int catId2 = Integer.parseInt(Long.toString(cat2.getCategoryID()));
return catId1 - catId2;
}
});
}
}
return categories;
}
public static CategoryType getCsCategoriesMapped(HttpServletRequest request) throws ApiException, SdkException, Exception{
EbayStoreSiteFacade sf = null;
String categoryId = null;
CategoryType cate = null;
if (request.getParameter("productStoreId") == null && request.getAttribute("productStoreId") == null) {
Debug.logError("Required productStoreId for get ebay LeafCategories.", module);
return null;
}
if (request.getParameter("categoryId") != null || request.getAttribute("categoryId") != null) {
categoryId = request.getParameter("categoryId") != null ? request.getParameter("categoryId") : (String)request.getAttribute("categoryId");
Debug.logInfo("Load child categories from session following site id and categoryId is ".concat(categoryId), module);
} else {
Debug.logWarning("No categoryId to get child categories.", module);
return null;
}
ApiContext apiContext = getApiContext(request);
sf = getSiteFacade(apiContext,request);
if (UtilValidate.isNotEmpty(sf)) {
Map<SiteCodeType, List<CategoryType>> csCateMaps = sf.getSiteCategoriesCSMap();
List<CategoryType> csCateList = csCateMaps.get(apiContext.getSite());
if (UtilValidate.isNotEmpty(csCateList)) {
if (UtilValidate.isNotEmpty(categoryId)) {
// find child of selected ebay categories
for (CategoryType csCate : csCateList) {
if (csCate.getCategoryID().equals(categoryId)) {
cate = csCate;
break;
}
}
}
}
}
return cate;
}
public static String setSelectedEbayCategory(HttpServletRequest request, HttpServletResponse response) {
Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
Delegator delegator = (Delegator) request.getAttribute("delegator");
if (UtilValidate.isEmpty(requestParams.get("productStoreId"))) {
request.setAttribute("_ERROR_MESSAGE_","Required productStoreId.");
return "error";
}
if (UtilValidate.isEmpty(requestParams.get("isProductId"))) {
request.setAttribute("_ERROR_MESSAGE_","Required can not find form Id.");
return "error";
}
String isProductId = (String) requestParams.get("isProductId");
if (UtilValidate.isEmpty(requestParams.get("productId")) || UtilValidate.isEmpty(requestParams.get("ebayCategory"))) {
request.setAttribute("_ERROR_MESSAGE_","No ebay category or productId selected with form id ".concat(isProductId));
return "error";
}
String categoryId = (String)requestParams.get("ebayCategory");
if (categoryId.contains("false")) {
request.setAttribute("_ERROR_MESSAGE_","Please select ebay category with low level of categories.");
return "error";
} else {
if (categoryId.contains("true")) categoryId = categoryId.substring(0,categoryId.indexOf(":"));
}
String productId = (String) requestParams.get("isProductId");
EbayStoreCategoryFacade cf = null;
EbayStoreSiteFacade sf = null;
// find is exiting product and set category into item in additem call
try {
if (UtilValidate.isNotEmpty(EntityQuery.use(delegator).from("Product").where("productId", productId).queryOne())) {
ApiContext apiContext = getApiContext(request);
Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
List<Map<String,Object>> addItemlist = UtilGenerics.checkList(addItemObject.get("itemListing"));
if (UtilValidate.isNotEmpty(addItemlist)) {
for (Map<String,Object> addItemCall : addItemlist) {
AddItemCall itemCall = (AddItemCall) addItemCall.get("addItemCall");
ItemType item = itemCall.getItem();
if (productId.equals(item.getSKU())) {
request.setAttribute("categoryId", categoryId);
CategoryType csCate = getCsCategoriesMapped(request);
if (UtilValidate.isNotEmpty(csCate)) {
Debug.logInfo("Set selected ebay category ".concat(csCate.getCategoryID().toString().concat(csCate.getCategoryName()).concat(String.valueOf((csCate.isLeafCategory())))), module);
item.setPrimaryCategory(csCate);
// get category feature and attributes
sf = getSiteFacade(apiContext, request);
String refName = "itemCateFacade_".concat(csCate.getCategoryID());
if (UtilValidate.isEmpty(addItemObject.get(refName))) {
cf = new EbayStoreCategoryFacade(csCate.getCategoryID(), apiContext, sf.getAttrMaster(), sf);
addItemObject.put(refName, cf);
}
request.setAttribute("_EVENT_MESSAGE_","Set selected ebay category ".concat(csCate.getCategoryID().toString()).concat(" with product ".concat(productId).concat(" successed.")));
} else {
Debug.logWarning(categoryId.concat(" This category is not leaf category or ?"), module);
}
break;
}
}
}
}
} catch (GenericEntityException e) {
Debug.logError(e.getMessage(), module);
} catch (ApiException e) {
Debug.logError(e.getMessage(), module);
} catch (SdkException e) {
Debug.logError(e.getMessage(), module);
} catch (Exception e) {
Debug.logError(e.getMessage(), module);
}
request.setAttribute("productStoreId", requestParams.get("productStoreId"));
request.setAttribute("isProductId", productId);
request.removeAttribute("categoryId");
return "success";
}
/* for shipping service detail filter */
private static boolean isFlat(ShippingTypeCodeType[] st) {
for (int i = 0; i < st.length; i++) {
if (st[i].compareTo(ShippingTypeCodeType.FLAT) == 0) {
return true;
}
}
return false;
}
public static ShippingServiceDetailsType[] filterShippingService(ShippingServiceDetailsType[] array) {
ArrayList<ShippingServiceDetailsType> list = new ArrayList<ShippingServiceDetailsType>();
for (int i = 0; i < array.length; i++) {
if (isFlat(array[i].getServiceType()) && array[i].getShippingServiceID() < SHIPPING_SERVICE_ID_LIMIT) {
list.add(array[i]);
}
}
return list.toArray(new ShippingServiceDetailsType[0]);
}
public static String updateProductExportDetail(HttpServletRequest request, HttpServletResponse response) {
Delegator delegator = (Delegator) request.getAttribute("delegator");
HttpSession session = request.getSession(true);
LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
Locale locale = UtilHttp.getLocale(request);
GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
HashMap<String, Object> attributeMapList = new HashMap<String, Object>();
String id = "";
if (UtilValidate.isNotEmpty(requestParams.get("listype"))) {
if ("auction".equals(requestParams.get("listype"))) {
id = "_1";
} else {
id = "_2";
}
}
String startPrice = "";
if (UtilValidate.isNotEmpty(requestParams.get("startPrice".concat(id)))) {
startPrice = (String) requestParams.get("startPrice".concat(id));
}
String buyItNowPrice = "";
if (UtilValidate.isNotEmpty(requestParams.get("buyItNowPrice".concat(id)))) {
buyItNowPrice = (String) requestParams.get("buyItNowPrice".concat(id));
}
String productId = null;
if (UtilValidate.isNotEmpty(requestParams.get("productId"))) {
productId = requestParams.get("productId").toString();
}
String itemPkCateId = (String) requestParams.get("primaryCateId");
String shippingService = (String) requestParams.get("ShippingService");
String productStoreId = (String) requestParams.get("productStoreId");
// initialize request parameter.
Map<String, Object> paramMap = UtilHttp.getParameterMap(request);
List<String> nameSpecificList = new LinkedList<String>();
List<String> valueSpecificList = new LinkedList<String>();
String nameValueListType = null;
String valueListType = null;
int rowCount = UtilHttp.getMultiFormRowCount(paramMap);
if (rowCount > 1) {
for (int i = 0; i < rowCount; i++) {
String thisSuffix = UtilHttp.getMultiRowDelimiter() + i; // current suffix after each field id
// get the NameSpecifics
if (paramMap.containsKey("nameValueListType" + thisSuffix)) {
nameValueListType = (String) paramMap.remove("nameValueListType" + thisSuffix);
}
// get the ValueSpecifics
if (paramMap.containsKey("categorySpecifics" + thisSuffix)) {
valueListType = (String) paramMap.remove("categorySpecifics" + thisSuffix);
}
if ((UtilValidate.isNotEmpty(nameValueListType)) && (UtilValidate.isNotEmpty(valueListType))){
nameSpecificList.add(nameValueListType);
valueSpecificList.add(valueListType);
}
}
}
try {
ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
List<Map<String,Object>> listAddItem = null;
if (UtilValidate.isNotEmpty(addItemObject.get("itemListing"))) {
listAddItem = UtilGenerics.checkList(addItemObject.get("itemListing"));
} else {
listAddItem = new LinkedList<Map<String,Object>>();
}
for (Map<String,Object> itemObj : listAddItem) {
AddItemCall addItemCall = (AddItemCall) itemObj.get("addItemCall");
ItemType item = addItemCall.getItem();
String SKU = item.getSKU();
if (UtilValidate.isNotEmpty(productId)) {
if (productId.equals(SKU)) {
attributeMapList.put("Title", item.getTitle());
attributeMapList.put("SKU", SKU);
attributeMapList.put("Currency", item.getCurrency().value());
attributeMapList.put("Description", item.getDescription());
attributeMapList.put("ApplicationData", item.getApplicationData());
attributeMapList.put("Country", item.getCountry().value());
attributeMapList.put("PictureURL", item.getPictureDetails().getPictureURL(0));
attributeMapList.put("Site", item.getSite().value());
attributeMapList.put("UseTaxTable", "false");
attributeMapList.put("BestOfferEnabled", "true");
attributeMapList.put("AutoPayEnabled", "true");
attributeMapList.put("CategoryID", item.getPrimaryCategory().getCategoryID());
attributeMapList.put("CategoryLevel", item.getPrimaryCategory().getCategoryLevel());
attributeMapList.put("CategoryName", item.getPrimaryCategory().getCategoryName());
attributeMapList.put("CategoryParentID", item.getPrimaryCategory().getCategoryParentID(0).toString());
attributeMapList.put("LeafCategory", "true");
attributeMapList.put("LSD", "true");
// set Item Specifics.
int itemSpecificsSize = nameSpecificList.size();
int valueSpecificsSize = valueSpecificList.size();
if ((itemSpecificsSize > 0) && (valueSpecificsSize > 0)) {
NameValueListArrayType nameValueListArray = new NameValueListArrayType();
NameValueListType[] nameValueListTypes = new NameValueListType[nameSpecificList.size()];
for (int i = 0; i < itemSpecificsSize; i++) {
String name = nameSpecificList.get(i);
String value = valueSpecificList.get(i);
String[] valueArray = new String[] { value };
// set Name value list type.
NameValueListType listType = new NameValueListType();
listType.setName(name);
listType.setValue(valueArray);
nameValueListTypes[i] = listType;
}
nameValueListArray.setNameValueList(nameValueListTypes);
item.setItemSpecifics(nameValueListArray);
}
item.setUseTaxTable(false);
item.setDispatchTimeMax(3);
ReturnPolicyType policy = new ReturnPolicyType();
policy.setReturnsAcceptedOption("ReturnsNotAccepted");
item.setReturnPolicy(policy);
attributeMapList.put("ReturnsAcceptedOption", "ReturnsNotAccepted");
String currencyId = "";
if (UtilValidate.isNotEmpty(requestParams.get("currencyId".concat(id)))) {
currencyId = (String) requestParams.get("currencyId".concat(id));
}
if (UtilValidate.isNotEmpty(requestParams.get("enabledTheme")) && "Y".equals(requestParams.get("enabledTheme"))) {
ListingDesignerType designer = new ListingDesignerType();
String layoutId = (String) requestParams.get("themeGroup");
String themeIdImage = (String) requestParams.get("theme");
String themeId = themeIdImage.substring(0, themeIdImage.indexOf(":"));
designer.setLayoutID(Integer.parseInt(layoutId));
designer.setThemeID(Integer.parseInt(themeId));
item.setListingDesigner(designer);
attributeMapList.put("LayoutID", item.getListingDesigner().getLayoutID());
attributeMapList.put("ThemeID", item.getListingDesigner().getThemeID());
}
if ("_1".equals(id)) {
item.setListingType(ListingTypeCodeType.CHINESE);
AmountType amtStart = new AmountType();
amtStart.setCurrencyID(CurrencyCodeType.valueOf(currencyId));
amtStart.setValue(Double.parseDouble(startPrice));
item.setStartPrice(amtStart);
AmountType amtBIN = new AmountType();
amtBIN.setCurrencyID(CurrencyCodeType.valueOf(currencyId));
amtBIN.setValue(Double.parseDouble(buyItNowPrice));
item.setBuyItNowPrice(amtBIN);
attributeMapList.put("BuyItNowPrice", item.getBuyItNowPrice().getValue());
if (UtilValidate.isNotEmpty(requestParams.get("reservePrice".concat(id)))) {
AmountType amtResv = new AmountType();
amtResv.setCurrencyID(CurrencyCodeType.valueOf(currencyId));
amtResv.setValue(Double.parseDouble(requestParams.get("reservePrice".concat(id)).toString()));
item.setReservePrice(amtResv);
attributeMapList.put("ReservePrice", item.getReservePrice().getValue());
}
} else if ("_2".equals(id)) {
item.setListingType(ListingTypeCodeType.FIXED_PRICE_ITEM);
AmountType amtBIN = new AmountType();
amtBIN.setCurrencyID(CurrencyCodeType.valueOf(currencyId));
amtBIN.setValue(Double.parseDouble(startPrice));
item.setStartPrice(amtBIN);
if (UtilValidate.isNotEmpty(requestParams.get("enableBestOffer".concat(id)))) {
item.setBestOfferEnabled(Boolean.valueOf(requestParams.get("enableBestOffer".concat(id)).toString()));
}
}
attributeMapList.put("ListingType", item.getListingType().value());
attributeMapList.put("StartPrice", item.getStartPrice().getValue());
EbayStoreHelper.mappedPaymentMethods(requestParams, itemPkCateId, addItemObject, item, attributeMapList);
ShippingDetailsType shippingDetail = new ShippingDetailsType();
ShippingServiceOptionsType[] shippingOptions = new ShippingServiceOptionsType[1];
ShippingServiceOptionsType shippingOption = new ShippingServiceOptionsType();
shippingOption.setShippingServicePriority(1);
shippingOption.setShippingService(shippingService);
AmountType amtServiceCost = new AmountType();
amtServiceCost.setValue(5.0);
amtServiceCost.setCurrencyID(CurrencyCodeType.USD);
shippingOption.setShippingServiceCost(amtServiceCost);
shippingOptions[0] = shippingOption;
shippingDetail.setShippingType(ShippingTypeCodeType.FLAT);
shippingDetail.setShippingServiceOptions(shippingOptions);
item.setShippingDetails(shippingDetail);
attributeMapList.put("ShippingService", shippingService);
attributeMapList.put("ShippingServiceCost", ""+5.0);
attributeMapList.put("ShippingServiceCostCurrency", "USD");
attributeMapList.put("ShippingServicePriority", "1");
attributeMapList.put("ShippingType", "Flat");
attributeMapList.put("ShippingServiceAdditionalCost", amtServiceCost.getValue());
EbayStoreHelper.mappedShippingLocations(requestParams, item, apiContext, request, attributeMapList);
if (UtilValidate.isNotEmpty(requestParams.get("vatPercent".concat(id)))) {
VATDetailsType vat = new VATDetailsType();
vat.setVATPercent(new Float(requestParams.get("vatPercent".concat(id)).toString()));
item.setVATDetails(vat);
attributeMapList.put("VATPercent", vat);
}
if (UtilValidate.isNotEmpty(requestParams.get("location"))) {
item.setLocation(requestParams.get("location").toString());
attributeMapList.put("Location", requestParams.get("location").toString());
}
if (UtilValidate.isNotEmpty(requestParams.get("quantity".concat(id)))) {
item.setQuantity(Integer.parseInt(requestParams.get("quantity".concat(id)).toString()));
attributeMapList.put("Quantity", requestParams.get("quantity".concat(id)).toString());
}
if (UtilValidate.isNotEmpty(requestParams.get("duration".concat(id)))) {
item.setListingDuration(requestParams.get("duration".concat(id)).toString());
attributeMapList.put("ListingDuration", requestParams.get("duration".concat(id)).toString());
}
if (UtilValidate.isNotEmpty(requestParams.get("lotsize".concat(id)))) {
item.setLotSize(Integer.parseInt(requestParams.get("lotsize".concat(id)).toString()));
attributeMapList.put("LotSize", requestParams.get("lotsize".concat(id)).toString());
}
if (UtilValidate.isNotEmpty(requestParams.get("postalCode".concat(id)))) {
item.setPostalCode(requestParams.get("postalCode".concat(id)).toString());
attributeMapList.put("PostalCode", requestParams.get("postalCode".concat(id)).toString());
}
StorefrontType storeFront = new StorefrontType();
if (UtilValidate.isNotEmpty(requestParams.get("ebayStore1Category"))) {
String ebayStore1Category = (String)requestParams.get("ebayStore1Category");
if (ebayStore1Category.contains("false")) {
request.setAttribute("_ERROR_MESSAGE_","Please select ebay store category with low level of categories.");
return "error";
} else {
if (ebayStore1Category.contains("true")) ebayStore1Category = ebayStore1Category.substring(0,ebayStore1Category.indexOf(":"));
}
storeFront.setStoreCategoryID(new Long(ebayStore1Category));
attributeMapList.put("StoreCategoryID", ebayStore1Category);
}
if (UtilValidate.isNotEmpty(requestParams.get("ebayStore2Category"))) {
String ebayStore2Category = (String)requestParams.get("ebayStore2Category");
if (ebayStore2Category.contains("false")) {
request.setAttribute("_ERROR_MESSAGE_","Please select ebay store category with low level of categories.");
return "error";
} else {
if (ebayStore2Category.contains("true")) ebayStore2Category = ebayStore2Category.substring(0,ebayStore2Category.indexOf(":"));
}
storeFront.setStoreCategory2ID(new Long(ebayStore2Category));
attributeMapList.put("StoreCategory2ID", ebayStore2Category);
}
if (UtilValidate.isNotEmpty(requestParams.get("ebayStore1Category")) || UtilValidate.isNotEmpty(requestParams.get("ebayStore2Category"))) {
item.setStorefront(storeFront);
}
//TODO: set value of country and currency on the basis of request param values
item.setCountry(CountryCodeType.US);
attributeMapList.put("Country", "US");
item.setCurrency(CurrencyCodeType.USD);
attributeMapList.put("Currency", "USD");
if (UtilValidate.isNotEmpty(requestParams.get("requireEbayInventory")) && "Y".equals(requestParams.get("requireEbayInventory").toString())) {
GenericValue ebayProductStore = EntityQuery.use(delegator).from("EbayProductStoreInventory").where("productStoreId", productStoreId, "productId", productId).filterByDate().queryFirst();
if (UtilValidate.isNotEmpty(ebayProductStore)) {
String facilityId = ebayProductStore.getString("facilityId");
BigDecimal atp = ebayProductStore.getBigDecimal("availableToPromiseListing");
int intAtp = atp.intValue();
if ((facilityId != "") && (intAtp != 0)) {
int newAtp = intAtp - 1;
Map<String,Object> inMap = new HashMap<String, Object>();
inMap.put("productStoreId", productStoreId);
inMap.put("facilityId", facilityId);
inMap.put("productId", productId);
inMap.put("availableToPromiseListing", new BigDecimal(newAtp));
inMap.put("userLogin", userLogin);
try {
dispatcher.runSync("updateEbayProductStoreInventory", inMap);
} catch (GenericServiceException ex) {
Debug.logError(ex.getMessage(), module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(ex.getMessage()));
return "error";
}
itemObj.put("requireEbayInventory", "Y");
}
}
}
addItemCall.setItem(item);
// create/update EbayProductListing entity
Map<String, Object> prodMap = new HashMap<String, Object>();
prodMap.put("productStoreId", productStoreId);
prodMap.put("productId", productId);
prodMap.put("userLogin", userLogin);
if (UtilValidate.isNotEmpty(requestParams.get("isAutoRelist"))) {
prodMap.put("autoRelisting", "Y");
itemObj.put("isAutoRelist", "Y");
}
try {
GenericValue storeRole = EntityQuery.use(delegator).from("ProductStoreRole").where("productStoreId", productStoreId, "roleTypeId", "EBAY_ACCOUNT").queryFirst();
if (UtilValidate.isNotEmpty(storeRole)) {
GenericValue eBayUserLogin = EntityQuery.use(delegator).from("UserLogin")
.where("partyId", storeRole.get("partyId"))
.queryFirst();
if (UtilValidate.isNotEmpty(eBayUserLogin)) {
prodMap.put("userLoginId", eBayUserLogin.get("userLoginId").toString());
}
}
} catch (GenericEntityException ex) {
Debug.logError(ex.getMessage(), module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(ex.getMessage()));
return "error";
}
String productListingId = null;
if (UtilValidate.isEmpty(itemObj.get("productListingId"))) {
try {
prodMap.put("statusId", "ITEM_CREATED");
Map<String, Object> result = dispatcher.runSync("createEbayProductListing", prodMap);
productListingId = result.get("productListingId").toString();
itemObj.put("productListingId", productListingId);
itemObj.put("isSaved", "Y");
} catch (GenericServiceException ex) {
Debug.logError(ex.getMessage(), module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(ex.getMessage()));
return "error";
}
} else {
productListingId = itemObj.get("productListingId").toString();
prodMap.put("productListingId", productListingId);
try {
dispatcher.runSync("updateEbayProductListing", prodMap);
} catch (GenericServiceException ex) {
Debug.logError(ex.getMessage(), module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(ex.getMessage()));
return "error";
}
}
// create/update EbayProductListingAttribute
if (UtilValidate.isNotEmpty(productListingId)) {
attributeMapList.put("productListingId", productListingId);
Map<String, Object> ebayProdAttrMap = new HashMap<String, Object>();
ebayProdAttrMap.put("productListingId", productListingId);
ebayProdAttrMap.put("userLogin", userLogin);
ebayProdAttrMap.put("attributeMapList", attributeMapList);
try {
dispatcher.runSync("setEbayProductListingAttribute", ebayProdAttrMap);
} catch (GenericServiceException ex) {
Debug.logError(ex.getMessage(), module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(ex.getMessage()));
return "error";
}
}
}
}
}
request.setAttribute("productStoreId", requestParams.get("productStoreId"));
} catch(Exception e) {
Debug.logError(e.getMessage(), module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
return "error";
}
return "success";
}
public static String verifyItemBeforeAddAndExportToEbay(HttpServletRequest request, HttpServletResponse response) {
Delegator delegator = (Delegator) request.getAttribute("delegator");
LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
Locale locale = UtilHttp.getLocale(request);
String productStoreId = (String) requestParams.get("productStoreId");
HttpSession session = request.getSession(true);
GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
try {
ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
VerifyAddItemRequestType req = new VerifyAddItemRequestType();
VerifyAddItemResponseType resp = null;
AddItemResponseType addItemResp = null;
VerifyAddItemCall verifyCall = new VerifyAddItemCall(apiContext);
Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
List<Map<String,Object>> listAddItem = null;
if (UtilValidate.isNotEmpty(addItemObject.get("itemListing"))) {
listAddItem = UtilGenerics.checkList(addItemObject.get("itemListing"));
} else {
listAddItem = new LinkedList<Map<String,Object>>();
}
double feesummary = 0.0;
for (Map<String,Object> itemObj : listAddItem) {
AddItemCall addItemCall = (AddItemCall) itemObj.get("addItemCall");
ItemType item = addItemCall.getItem();
String SKU = item.getSKU();
if (UtilValidate.isNotEmpty(requestParams.get("productId"))) {
String productId = requestParams.get("productId").toString();
if (productId.equals(SKU)) {
req.setItem(item);
resp = (VerifyAddItemResponseType) verifyCall.execute(req);
if (resp != null && "SUCCESS".equals(resp.getAck().toString())) {
itemObj.put("isVerify", "Y");
FeesType feest = resp.getFees();
FeeType[] fees = feest.getFee();
for (FeeType fee : fees) {
double dfee = fee.getFee().getValue();
feesummary = feesummary + dfee;
}
//if item is verified then export it to ebay
AddItemRequestType addItemReq = new AddItemRequestType();
addItemReq.setItem(item);
addItemResp = (AddItemResponseType) addItemCall.execute(addItemReq);
if (addItemResp != null && "SUCCESS".equals(addItemResp.getAck().toString())) {
removeProductFromListing(request, response);
}
} else {
EbayStoreHelper.createErrorLogMessage(userLogin, dispatcher, productStoreId, resp.getAck().toString(), "Verify Item : verifyItemBeforeAdd", resp.getErrors(0).getLongMessage());
}
}
}
}
//request.setAttribute("itemFee", feesummary);
request.setAttribute("productStoreId", requestParams.get("productStoreId"));
} catch (Exception e) {
Debug.logError(e.getMessage(), module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
return "error";
}
return "success";
}
public static String removeProductFromListing(HttpServletRequest request, HttpServletResponse response) {
Delegator delegator = (Delegator) request.getAttribute("delegator");
Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
Locale locale = UtilHttp.getLocale(request);
String productStoreId = (String) requestParams.get("productStoreId");
try {
ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
List<Map<String,Object>> listAddItem = null;
if (UtilValidate.isNotEmpty(addItemObject.get("itemListing"))) {
listAddItem = UtilGenerics.checkList(addItemObject.get("itemListing"));
} else {
listAddItem = new LinkedList<Map<String,Object>>();
}
int i = 0;
for (Map<String,Object> itemObj : listAddItem) {
AddItemCall addItemCall = (AddItemCall) itemObj.get("addItemCall");
ItemType item = addItemCall.getItem();
String SKU = item.getSKU();
if (UtilValidate.isNotEmpty(requestParams.get("productId"))) {
String productId = requestParams.get("productId").toString();
if (productId.equals(SKU)) {
listAddItem.remove(i);
}
}
i++;
}
if (listAddItem.size() <=0) {
removeItemListingObject(request, apiContext);
}
request.setAttribute("productStoreId", requestParams.get("productStoreId"));
} catch (Exception e) {
Debug.logError(e.getMessage(), module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
return "error";
}
return "success";
}
public static String exportListingToEbay(HttpServletRequest request, HttpServletResponse response) {
LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
Delegator delegator = (Delegator) request.getAttribute("delegator");
Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
Locale locale = UtilHttp.getLocale(request);
String productStoreId = (String) requestParams.get("productStoreId");
HttpSession session = request.getSession(true);
GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
try {
ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
Map<String,Object> addItemObject = getAddItemListingObject(request, apiContext);
List<Map<String,Object>> listAddItem = null;
if (UtilValidate.isNotEmpty(addItemObject.get("itemListing"))) {
listAddItem = UtilGenerics.checkList(addItemObject.get("itemListing"));
} else {
listAddItem = new LinkedList<Map<String,Object>>();
}
for (Map<String,Object> itemObj : listAddItem) {
updateQuantityInventoryProduct(itemObj, productStoreId, locale, delegator, dispatcher, userLogin);
dispatcher.runSync("exportProductEachItem", UtilMisc.toMap("itemObject", itemObj));
}
} catch (Exception e) {
Debug.logError(e.getMessage(), module);
request.setAttribute("_ERROR_MESSAGE_","Exception: ".concat(e.getMessage()));
return "error";
}
return "success";
}
private static void updateQuantityInventoryProduct(Map<String, Object> itemObj, String productStoreId, Locale locale, Delegator delegator, LocalDispatcher dispatcher, GenericValue userLogin) {
try {
AddItemCall addItemCall = (AddItemCall) itemObj.get("addItemCall");
ItemType item = addItemCall.getItem();
String productId = item.getSKU();
if (UtilValidate.isNotEmpty(itemObj.get("requireEbayInventory")) && (itemObj.get("requireEbayInventory").equals("Y"))) {
GetSellingManagerInventoryRequestType req = new GetSellingManagerInventoryRequestType();
GetSellingManagerInventoryResponseType resp = null;
SellingManagerProductType[] returnedSellingManagerProductType = null;
GetSellingManagerInventoryCall call = new GetSellingManagerInventoryCall(EbayStoreHelper.getApiContext(productStoreId, locale, delegator));
resp = (GetSellingManagerInventoryResponseType)call.execute(req);
if (resp != null && "SUCCESS".equals(resp.getAck().toString())) {
returnedSellingManagerProductType = resp.getSellingManagerProduct();
for (int i = 0; i < returnedSellingManagerProductType.length; i++) {
SellingManagerProductDetailsType prodDetailType = returnedSellingManagerProductType[i].getSellingManagerProductDetails();
String productIdInv = Long.toString(prodDetailType.getProductID());
if (productId.equals(productIdInv)) {
int qty = prodDetailType.getQuantityAvailable();
if (qty > 0) {
int newQty = qty - 1;
prodDetailType.setQuantityAvailable(newQty);
ReviseSellingManagerProductCall revProdCall = new ReviseSellingManagerProductCall(EbayStoreHelper.getApiContext(productStoreId, locale, delegator));
ReviseSellingManagerProductRequestType revReq = new ReviseSellingManagerProductRequestType();
ReviseSellingManagerProductResponseType revResp = null;
revReq.setSellingManagerProductDetails(prodDetailType);
revResp = (ReviseSellingManagerProductResponseType) revProdCall.execute(revReq);
if (revResp != null && "SUCCESS".equals(revResp.getAck().toString())) {
Debug.logInfo(" Already update quantity on eBay inventory with product id ::"+revResp.getSellingManagerProductDetails().getProductID(), module);
} else {
EbayStoreHelper.createErrorLogMessage(userLogin, dispatcher, productStoreId, revResp.getAck().toString(), "ReviseSellingManagerProductCall : updateQuantityInventoryProduct", revResp.getErrors(0).getLongMessage());
}
}
}
}
} else {
EbayStoreHelper.createErrorLogMessage(userLogin, dispatcher, productStoreId, resp.getAck().toString(), "GetSellingManagerInventoryCall : updateQuantityInventoryProduct", resp.getErrors(0).getLongMessage());
}
}
} catch (Exception e) {
Debug.logError(e.getMessage(), module);
}
}
public static Map<String, Map<String, List<String>>> categorySpecifics(String categoryId, HttpServletRequest request) {
Map<String, Map<String, List<String>>> recommendationMap = new HashMap<String, Map<String,List<String>>>();
Delegator delegator = (Delegator) request.getAttribute("delegator");
Map<String,Object> requestParams = UtilHttp.getParameterMap(request);
Locale locale = UtilHttp.getLocale(request);
String productStoreId = (String) requestParams.get("productStoreId");
try {
ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
GetCategorySpecificsCall categorySpecifics = new GetCategorySpecificsCall(apiContext);
String[] categoryIds = {categoryId};
categorySpecifics.setCategoryID(categoryIds);
DetailLevelCodeType[] detailLevel = new DetailLevelCodeType[] {
DetailLevelCodeType.RETURN_ALL,
DetailLevelCodeType.ITEM_RETURN_ATTRIBUTES,
DetailLevelCodeType.ITEM_RETURN_DESCRIPTION
};
categorySpecifics.setDetailLevel(detailLevel);
RecommendationsType[] recommend = categorySpecifics.getCategorySpecifics();
for (int i = 0; i < recommend.length; i++) {
NameRecommendationType[] nameRecommend = recommend[i].getNameRecommendation();
Map<String, List<String>> nameRecommendationMap = new HashMap<String, List<String>>();
for (int j = 0; j < nameRecommend.length; j++) {
String name = nameRecommend[j].getName();
List<String> valueList = new LinkedList<String>();
ValueRecommendationType[] valueRecommend = nameRecommend[j].getValueRecommendation();
for (int k = 0; k < valueRecommend.length; k++) {
String value = valueRecommend[k].getValue();
valueList.add(value);
}
nameRecommendationMap.put(name, valueList);
}
recommendationMap.put("categorySpecifics", nameRecommendationMap);
}
} catch (Exception e) {
Debug.logError(e.getMessage(), module);
return null;
}
return recommendationMap;
}
}