| /* |
| * 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.io.IOException; |
| import java.math.BigDecimal; |
| import java.util.Calendar; |
| import java.util.Date; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Locale; |
| import java.util.Map; |
| |
| import javax.servlet.http.HttpServletRequest; |
| |
| import org.apache.ofbiz.base.config.GenericConfigException; |
| import org.apache.ofbiz.base.util.Debug; |
| import org.apache.ofbiz.base.util.UtilDateTime; |
| import org.apache.ofbiz.base.util.UtilGenerics; |
| import org.apache.ofbiz.base.util.UtilMisc; |
| import org.apache.ofbiz.base.util.UtilProperties; |
| import org.apache.ofbiz.base.util.UtilValidate; |
| import org.apache.ofbiz.ebay.EbayHelper; |
| import org.apache.ofbiz.entity.Delegator; |
| import org.apache.ofbiz.entity.GenericEntityException; |
| import org.apache.ofbiz.entity.GenericValue; |
| import org.apache.ofbiz.entity.serialize.SerializeException; |
| import org.apache.ofbiz.entity.serialize.XmlSerializer; |
| import org.apache.ofbiz.entity.util.EntityQuery; |
| import org.apache.ofbiz.service.DispatchContext; |
| import org.apache.ofbiz.service.GenericServiceException; |
| import org.apache.ofbiz.service.LocalDispatcher; |
| import org.apache.ofbiz.service.ServiceUtil; |
| import org.apache.ofbiz.service.calendar.RecurrenceInfo; |
| import org.apache.ofbiz.service.calendar.RecurrenceInfoException; |
| import org.apache.ofbiz.service.config.ServiceConfigUtil; |
| |
| import com.ebay.sdk.ApiAccount; |
| import com.ebay.sdk.ApiContext; |
| import com.ebay.sdk.ApiCredential; |
| import com.ebay.sdk.ApiLogging; |
| import com.ebay.sdk.call.AddItemCall; |
| import com.ebay.sdk.call.AddOrderCall; |
| import com.ebay.sdk.call.GetOrdersCall; |
| import com.ebay.soap.eBLBaseComponents.AddItemRequestType; |
| import com.ebay.soap.eBLBaseComponents.AddItemResponseType; |
| import com.ebay.soap.eBLBaseComponents.AddOrderRequestType; |
| import com.ebay.soap.eBLBaseComponents.AddOrderResponseType; |
| import com.ebay.soap.eBLBaseComponents.AmountType; |
| import com.ebay.soap.eBLBaseComponents.BuyerPaymentMethodCodeType; |
| import com.ebay.soap.eBLBaseComponents.CategoryType; |
| import com.ebay.soap.eBLBaseComponents.CountryCodeType; |
| import com.ebay.soap.eBLBaseComponents.CurrencyCodeType; |
| import com.ebay.soap.eBLBaseComponents.GetOrdersRequestType; |
| import com.ebay.soap.eBLBaseComponents.GetOrdersResponseType; |
| import com.ebay.soap.eBLBaseComponents.GeteBayDetailsResponseType; |
| import com.ebay.soap.eBLBaseComponents.ItemType; |
| import com.ebay.soap.eBLBaseComponents.ListingDesignerType; |
| import com.ebay.soap.eBLBaseComponents.ListingTypeCodeType; |
| import com.ebay.soap.eBLBaseComponents.OrderArrayType; |
| import com.ebay.soap.eBLBaseComponents.OrderIDArrayType; |
| import com.ebay.soap.eBLBaseComponents.OrderStatusCodeType; |
| import com.ebay.soap.eBLBaseComponents.OrderType; |
| import com.ebay.soap.eBLBaseComponents.PictureDetailsType; |
| import com.ebay.soap.eBLBaseComponents.ReturnPolicyType; |
| import com.ebay.soap.eBLBaseComponents.ShipmentTrackingDetailsType; |
| import com.ebay.soap.eBLBaseComponents.ShippingDetailsType; |
| import com.ebay.soap.eBLBaseComponents.ShippingLocationDetailsType; |
| import com.ebay.soap.eBLBaseComponents.ShippingServiceOptionsType; |
| import com.ebay.soap.eBLBaseComponents.ShippingTypeCodeType; |
| import com.ebay.soap.eBLBaseComponents.SiteCodeType; |
| import com.ebay.soap.eBLBaseComponents.TradingRoleCodeType; |
| import com.ebay.soap.eBLBaseComponents.VATDetailsType; |
| import com.ibm.icu.text.SimpleDateFormat; |
| |
| public class EbayStoreHelper { |
| private static final String module = EbayStoreHelper.class.getName(); |
| public static final String resource = "EbayStoreUiLabels"; |
| |
| public static ApiContext getApiContext(String productStoreId,Locale locale, Delegator delegator) { |
| Map<String, Object> context = new HashMap<String, Object>(); |
| context.put("locale", locale); |
| context.put("productStoreId", productStoreId); |
| Map<String, Object> config = EbayHelper.buildEbayConfig(context, delegator); |
| ApiCredential apiCredential = new ApiCredential(); |
| ApiLogging apiLogging = new ApiLogging(); |
| apiLogging.setEnableLogging(false); |
| apiLogging.setLogExceptions(false); |
| apiLogging.setLogSOAPMessages(false); |
| |
| String devID = (String)config.get("devId"); |
| String appID = (String)config.get("appID"); |
| String certID = (String)config.get("certID"); |
| String token = (String)config.get("token"); |
| String apiServerUrl = (String)config.get("apiServerUrl"); |
| |
| if (token != null) { |
| apiCredential.seteBayToken(token); |
| } else if (devID != null && appID != null && certID != null) { |
| ApiAccount apiAccount = new ApiAccount(); |
| apiAccount.setApplication(appID); |
| apiAccount.setCertificate(certID); |
| apiAccount.setDeveloper(devID); |
| apiCredential.setApiAccount(apiAccount); |
| } |
| ApiContext apiContext = new ApiContext(); |
| apiContext.setApiCredential(apiCredential); |
| apiContext.setApiServerUrl(apiServerUrl); |
| apiContext.setApiLogging(apiLogging); |
| apiContext.setErrorLanguage("en_US"); |
| return apiContext; |
| } |
| |
| public static SiteCodeType getSiteCodeType(String productStoreId, Locale locale, Delegator delegator) { |
| Map<String, Object> context = new HashMap<String, Object>(); |
| context.put("locale", locale); |
| context.put("productStoreId", productStoreId); |
| Map<String, Object> config = EbayHelper.buildEbayConfig(context, delegator); |
| String siteId = (String)config.get("siteID"); |
| if (siteId != null) { |
| if (siteId.equals("0")) return SiteCodeType.US; |
| if (siteId.equals("2")) return SiteCodeType.CANADA; |
| if (siteId.equals("3")) return SiteCodeType.UK; |
| if (siteId.equals("15")) return SiteCodeType.AUSTRALIA; |
| if (siteId.equals("16")) return SiteCodeType.AUSTRIA; |
| if (siteId.equals("23")) return SiteCodeType.BELGIUM_FRENCH; |
| if (siteId.equals("71")) return SiteCodeType.FRANCE; |
| if (siteId.equals("77")) return SiteCodeType.GERMANY; |
| if (siteId.equals("100")) return SiteCodeType.E_BAY_MOTORS; |
| if (siteId.equals("101")) return SiteCodeType.ITALY; |
| if (siteId.equals("123")) return SiteCodeType.BELGIUM_DUTCH; |
| if (siteId.equals("146")) return SiteCodeType.NETHERLANDS; |
| if (siteId.equals("189")) return SiteCodeType.SPAIN; |
| if (siteId.equals("193")) return SiteCodeType.SWITZERLAND; |
| if (siteId.equals("196")) return SiteCodeType.TAIWAN; |
| if (siteId.equals("201")) return SiteCodeType.HONG_KONG; |
| if (siteId.equals("203")) return SiteCodeType.INDIA; |
| if (siteId.equals("205")) return SiteCodeType.IRELAND; |
| if (siteId.equals("207")) return SiteCodeType.MALAYSIA; |
| if (siteId.equals("210")) return SiteCodeType.CANADA_FRENCH; |
| if (siteId.equals("211")) return SiteCodeType.PHILIPPINES; |
| if (siteId.equals("212")) return SiteCodeType.POLAND; |
| if (siteId.equals("216")) return SiteCodeType.SINGAPORE; |
| if (siteId.equals("218")) return SiteCodeType.SWEDEN; |
| if (siteId.equals("223")) return SiteCodeType.CHINA; |
| } |
| return SiteCodeType.US; |
| } |
| |
| public static boolean validatePartyAndRoleType(Delegator delegator, String partyId) { |
| GenericValue partyRole = null; |
| try { |
| if (partyId == null) { |
| Debug.logError("Require field partyId.",module); |
| return false; |
| } |
| partyRole = EntityQuery.use(delegator).from("PartyRole").where("partyId", partyId, "roleTypeId", "EBAY_ACCOUNT").queryOne(); |
| if (partyRole == null) { |
| Debug.logError("Party Id ".concat(partyId).concat("not have roleTypeId EBAY_ACCOUNT"),module); |
| return false; |
| } |
| } catch (GenericEntityException e) { |
| Debug.logError(e.getMessage(), module); |
| return false; |
| } |
| return true; |
| } |
| |
| public static String retriveEbayCategoryIdByPartyId(Delegator delegator, String productCategoryId, String partyId) { |
| String ebayCategoryId = null; |
| List<GenericValue> productCategoryRoles = null; |
| try { |
| if (partyId == null) { |
| Debug.logError("Require field partyId.",module); |
| return ebayCategoryId; |
| } |
| productCategoryRoles = EntityQuery.use(delegator).from("ProductCategoryRole").where("productCategoryId", productCategoryId, "partyId", partyId, "roleTypeId", "EBAY_ACCOUNT").queryList(); |
| if (productCategoryRoles != null && productCategoryRoles.size()>0) { |
| for (GenericValue productCategoryRole : productCategoryRoles) { |
| ebayCategoryId = productCategoryRole.getString("comments"); |
| } |
| } else { |
| Debug.logInfo("Party Id ".concat(partyId).concat(" Not found productCategoryRole with productCategoryId "+ productCategoryId),module); |
| return ebayCategoryId; |
| } |
| } catch (GenericEntityException e) { |
| Debug.logError(e.getMessage(), module); |
| } |
| return ebayCategoryId; |
| } |
| |
| public static boolean createEbayCategoryIdByPartyId(Delegator delegator, String productCategoryId, String partyId, String ebayCategoryId) { |
| try { |
| if (partyId == null && ebayCategoryId != null) { |
| Debug.logError("Require field partyId and ebayCategoryId.",module); |
| return false; |
| } |
| GenericValue productCategoryRole = delegator.makeValue("ProductCategoryRole"); |
| productCategoryRole.put("productCategoryId",productCategoryId); |
| productCategoryRole.put("partyId", partyId); |
| productCategoryRole.put("roleTypeId","EBAY_ACCOUNT"); |
| productCategoryRole.put("fromDate",UtilDateTime.nowTimestamp()); |
| productCategoryRole.put("comments",ebayCategoryId); |
| productCategoryRole.create(); |
| } catch (GenericEntityException e) { |
| Debug.logError(e.getMessage(), module); |
| return false; |
| } |
| return true; |
| } |
| |
| public static boolean veriflyCategoryInCatalog(Delegator delegator, List<GenericValue> catalogCategories, String productCategoryId) { |
| boolean flag = false; |
| try { |
| for (GenericValue catalogCategory : catalogCategories) { |
| // check in productCatalogCategory first level 0 |
| if (catalogCategory.containsValue(productCategoryId)) { |
| flag = true; |
| break; |
| } else { |
| // check from child category level 1 |
| List<GenericValue> productCategoryRollupList = EntityQuery.use(delegator).from("ProductCategoryRollup").where("parentProductCategoryId",catalogCategory.getString("productCategoryId")).queryList(); |
| for (GenericValue productCategoryRollup : productCategoryRollupList) { |
| if (productCategoryRollup.containsValue(productCategoryId)) { |
| flag = true; |
| break; |
| } else { |
| // check from level 2 |
| List<GenericValue> prodCategoryRollupList = EntityQuery.use(delegator).from("ProductCategoryRollup").where("parentProductCategoryId",productCategoryRollup.getString("productCategoryId")).queryList(); |
| for (GenericValue prodCategoryRollup : prodCategoryRollupList) { |
| if (prodCategoryRollup.containsValue(productCategoryId)) { |
| flag = true; |
| break; |
| } |
| } |
| } |
| } |
| } |
| } |
| } catch (GenericEntityException e) { |
| Debug.logError(e.getMessage(), module); |
| return false; |
| } |
| return flag; |
| } |
| |
| public static Map<String, Object> startEbayAutoPreference(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object>result = new HashMap<String, Object>(); |
| LocalDispatcher dispatcher = dctx.getDispatcher(); |
| GenericValue userLogin = (GenericValue) context.get("userLogin"); |
| Delegator delegator = dctx.getDelegator(); |
| Locale locale = (Locale) context.get("locale"); |
| String productStoreId = (String) context.get("productStoreId"); |
| String autoPrefEnumId = (String) context.get("autoPrefEnumId"); |
| String serviceName = (String) context.get("serviceName"); |
| try { |
| GenericValue ebayProductPref = EntityQuery.use(delegator).from("EbayProductStorePref").where("productStoreId", productStoreId, "autoPrefEnumId", autoPrefEnumId).queryOne(); |
| String jobId = ebayProductPref.getString("autoPrefJobId"); |
| if (UtilValidate.isNotEmpty(jobId)) { |
| List<GenericValue> jobs = EntityQuery.use(delegator).from("JobSandbox").where("parentJobId", jobId, "statusId", "SERVICE_PENDING").queryList(); |
| if (jobs.size() == 0) { |
| Map<String, Object>inMap = new HashMap<String, Object>(); |
| inMap.put("jobId", jobId); |
| inMap.put("userLogin", userLogin); |
| dispatcher.runSync("resetScheduledJob", inMap); |
| } |
| } |
| if (UtilValidate.isEmpty(ebayProductPref.getString("autoPrefJobId"))) { |
| if (UtilValidate.isEmpty(serviceName)) { |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "EbayStoreAutoPrefJobEmpty", locale)); |
| } |
| /*** RuntimeData ***/ |
| String runtimeDataId = null; |
| GenericValue runtimeData = delegator.makeValue("RuntimeData"); |
| runtimeData = delegator.createSetNextSeqId(runtimeData); |
| runtimeDataId = runtimeData.getString("runtimeDataId"); |
| |
| /*** JobSandbox ***/ |
| // create the recurrence |
| String infoId = null; |
| String jobName = null; |
| long startTime = UtilDateTime.getNextDayStart(UtilDateTime.nowTimestamp()).getTime(); |
| RecurrenceInfo info; |
| // run every day when day start |
| info = RecurrenceInfo.makeInfo(delegator, startTime, 4, 1, -1); |
| infoId = info.primaryKey(); |
| // set the persisted fields |
| GenericValue enumeration = EntityQuery.use(delegator).from("Enumeration").where("enumId", autoPrefEnumId).queryOne(); |
| jobName = enumeration.getString("description"); |
| if (jobName == null) { |
| jobName = Long.toString((new Date().getTime())); |
| } |
| Map<String, Object> jFields = UtilMisc.<String, Object>toMap("jobName", jobName, "runTime", UtilDateTime.nowTimestamp(), |
| "serviceName", serviceName, "statusId", "SERVICE_PENDING", "recurrenceInfoId", infoId, "runtimeDataId", runtimeDataId); |
| |
| // set the pool ID |
| jFields.put("poolId", ServiceConfigUtil.getServiceEngine().getThreadPool().getSendToPool()); |
| |
| // set the loader name |
| jFields.put("loaderName", delegator.getDelegatorName()); |
| // create the value and store |
| GenericValue jobV; |
| jobV = delegator.makeValue("JobSandbox", jFields); |
| GenericValue jobSandbox = delegator.createSetNextSeqId(jobV); |
| |
| ebayProductPref.set("autoPrefJobId", jobSandbox.getString("jobId")); |
| ebayProductPref.store(); |
| |
| Map<String, Object>infoData = new HashMap<String, Object>(); |
| infoData.put("jobId", jobSandbox.getString("jobId")); |
| infoData.put("productStoreId", ebayProductPref.getString("productStoreId")); |
| runtimeData.set("runtimeInfo", XmlSerializer.serialize(infoData)); |
| runtimeData.store(); |
| } |
| } catch (GenericEntityException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } catch (GenericServiceException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } catch (SerializeException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } catch (IOException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| }catch (RecurrenceInfoException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } catch (GenericConfigException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| return result; |
| } |
| |
| public static Map<String, Object> stopEbayAutoPreference(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object>result = new HashMap<String, Object>(); |
| LocalDispatcher dispatcher = dctx.getDispatcher(); |
| GenericValue userLogin = (GenericValue) context.get("userLogin"); |
| Delegator delegator = dctx.getDelegator(); |
| String productStoreId = (String) context.get("productStoreId"); |
| String autoPrefEnumId = (String) context.get("autoPrefEnumId"); |
| try { |
| GenericValue ebayProductPref = EntityQuery.use(delegator).from("EbayProductStorePref").where("productStoreId", productStoreId, "autoPrefEnumId", autoPrefEnumId).queryOne(); |
| String jobId = ebayProductPref.getString("autoPrefJobId"); |
| List<GenericValue> jobs = EntityQuery.use(delegator).from("JobSandbox").where("parentJobId", jobId ,"statusId", "SERVICE_PENDING").queryList(); |
| |
| Map<String, Object>inMap = new HashMap<String, Object>(); |
| inMap.put("userLogin", userLogin); |
| for (int index = 0; index < jobs.size(); index++) { |
| inMap.put("jobId", jobs.get(index).getString("jobId")); |
| dispatcher.runSync("cancelScheduledJob", inMap); |
| } |
| } catch (GenericEntityException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } catch (GenericServiceException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| return result; |
| } |
| |
| public static void mappedPaymentMethods(Map<String,Object> requestParams, String itemPkCateId, Map<String,Object> addItemObject, ItemType item, HashMap<String, Object> attributeMapList) { |
| String refName = "itemCateFacade_"+itemPkCateId; |
| if (UtilValidate.isNotEmpty(addItemObject) && UtilValidate.isNotEmpty(requestParams)) { |
| EbayStoreCategoryFacade cf = (EbayStoreCategoryFacade) addItemObject.get(refName); |
| BuyerPaymentMethodCodeType[] paymentMethods = cf.getPaymentMethods(); |
| if (UtilValidate.isNotEmpty(paymentMethods)) { |
| BuyerPaymentMethodCodeType[] tempPayments = new BuyerPaymentMethodCodeType[paymentMethods.length]; |
| int i = 0; |
| for (BuyerPaymentMethodCodeType paymentMethod : paymentMethods) { |
| String pmName = paymentMethod.value(); |
| String payPara = (String) requestParams.get("Payments_".concat(pmName)); |
| if ("true".equals(payPara)) { |
| tempPayments[i] = paymentMethod; |
| attributeMapList.put(""+pmName, pmName); |
| if ("PayPal".equals(pmName)) { |
| if (UtilValidate.isNotEmpty(requestParams.get("paymentMethodPaypalEmail"))) { |
| item.setPayPalEmailAddress(requestParams.get("paymentMethodPaypalEmail").toString()); |
| attributeMapList.put("PaypalEmail", requestParams.get("paymentMethodPaypalEmail").toString()); |
| } |
| } |
| i++; |
| } |
| } |
| item.setPaymentMethods(tempPayments); |
| } |
| } |
| } |
| |
| public static void mappedShippingLocations(Map<String, Object> requestParams, ItemType item, ApiContext apiContext, HttpServletRequest request, HashMap<String, Object> attributeMapList) { |
| try { |
| if (UtilValidate.isNotEmpty(requestParams)) { |
| EbayStoreSiteFacade sf = EbayEvents.getSiteFacade(apiContext, request); |
| Map<SiteCodeType, GeteBayDetailsResponseType> eBayDetailsMap = sf.getEBayDetailsMap(); |
| GeteBayDetailsResponseType eBayDetails = eBayDetailsMap.get(apiContext.getSite()); |
| ShippingLocationDetailsType[] shippingLocationDetails = eBayDetails.getShippingLocationDetails(); |
| if (UtilValidate.isNotEmpty(shippingLocationDetails)) { |
| int i = 0; |
| String[] tempShipLocation = new String[shippingLocationDetails.length]; |
| for (ShippingLocationDetailsType shippingLocationDetail : shippingLocationDetails) { |
| String shippingLocation = shippingLocationDetail.getShippingLocation(); |
| String shipParam = (String)requestParams.get("Shipping_".concat(shippingLocation)); |
| if ("true".equals(shipParam)) { |
| tempShipLocation[i] = shippingLocation; |
| attributeMapList.put(""+shippingLocation, shippingLocation); |
| i++; |
| } |
| } |
| item.setShipToLocations(tempShipLocation); |
| } |
| } |
| } catch(Exception e) { |
| Debug.logError(e.getMessage(), module); |
| } |
| } |
| |
| public static Map<String, Object> exportProductEachItem(DispatchContext dctx, Map<String, Object> context) { |
| Map<String,Object> result = new HashMap<String, Object>(); |
| LocalDispatcher dispatcher = dctx.getDispatcher(); |
| Delegator delegator = dctx.getDelegator(); |
| Map<String, Object> itemObject = UtilGenerics.checkMap(context.get("itemObject")); |
| String productListingId = itemObject.get("productListingId").toString(); |
| AddItemCall addItemCall = (AddItemCall) itemObject.get("addItemCall"); |
| AddItemRequestType req = new AddItemRequestType(); |
| AddItemResponseType resp = null; |
| try { |
| GenericValue userLogin = EntityQuery.use(delegator).from("UserLogin").where("userLoginId", "system").queryOne(); |
| ItemType item = addItemCall.getItem(); |
| req.setItem(item); |
| resp = (AddItemResponseType) addItemCall.execute(req); |
| if (resp != null && "SUCCESS".equals(resp.getAck().toString()) || "WARNING".equals(resp.getAck().toString())) { |
| String itemId = resp.getItemID(); |
| String listingXml = addItemCall.getRequestXml().toString(); |
| Map<String, Object> updateItemMap = new HashMap<String, Object>(); |
| updateItemMap.put("productListingId", productListingId); |
| updateItemMap.put("itemId", itemId); |
| updateItemMap.put("listingXml", listingXml); |
| updateItemMap.put("statusId", "ITEM_APPROVED"); |
| updateItemMap.put("userLogin", userLogin); |
| try { |
| dispatcher.runSync("updateEbayProductListing", updateItemMap); |
| } catch (GenericServiceException ex) { |
| Debug.logError(ex.getMessage(), module); |
| return ServiceUtil.returnError(ex.getMessage()); |
| } |
| } |
| result = ServiceUtil.returnSuccess(); |
| } catch (GenericEntityException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } catch (GenericServiceException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| return result; |
| } |
| |
| public static Map<String, Object> setEbayProductListingAttribute(DispatchContext dctx, Map<String, Object> context) { |
| Delegator delegator = dctx.getDelegator(); |
| LocalDispatcher dispatcher = dctx.getDispatcher(); |
| Map<String, Object> attributeMapList = UtilGenerics.cast(context.get("attributeMapList")); |
| String productListingId = (String) context.get("productListingId"); |
| GenericValue userLogin = (GenericValue) context.get("userLogin"); |
| Map<String, Object> ebayProductListingAttributeMap = new HashMap<String, Object>(); |
| try { |
| List<GenericValue> attributeToClears = EntityQuery.use(delegator).from("EbayProductListingAttribute").where("productListingId", productListingId).queryList(); |
| for (int clearCount = 0; clearCount < attributeToClears.size(); clearCount++) { |
| GenericValue valueToClear = attributeToClears.get(clearCount); |
| if (valueToClear != null) { |
| valueToClear.remove(); |
| } |
| } |
| for (Map.Entry<String,Object> entry : attributeMapList.entrySet()) { |
| if (UtilValidate.isNotEmpty(entry.getKey())) { |
| ebayProductListingAttributeMap.put("productListingId", productListingId); |
| ebayProductListingAttributeMap.put("attrName", entry.getKey().toString()); |
| ebayProductListingAttributeMap.put("attrValue", entry.getValue().toString()); |
| ebayProductListingAttributeMap.put("userLogin", userLogin); |
| dispatcher.runSync("createEbayProductListingAttribute", ebayProductListingAttributeMap); |
| } |
| } |
| } catch (GenericEntityException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } catch (GenericServiceException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| return ServiceUtil.returnSuccess(); |
| } |
| |
| public static ItemType prepareAddItem(Delegator delegator, GenericValue attribute) { |
| ItemType item = new ItemType(); |
| try { |
| List<GenericValue> attrs = EntityQuery.use(delegator).from("EbayProductListingAttribute").where("productListingId", attribute.getString("productListingId")).queryList(); |
| AmountType amount = new AmountType(); |
| AmountType shippingServiceCost = new AmountType(); |
| PictureDetailsType picture = new PictureDetailsType(); |
| CategoryType category = new CategoryType(); |
| ListingDesignerType designer = new ListingDesignerType(); |
| ShippingDetailsType shippingDetail = new ShippingDetailsType(); |
| ShippingServiceOptionsType shippingOption = new ShippingServiceOptionsType(); |
| for (int index = 0; index < attrs.size(); index++) { |
| if ("Title".equals(attrs.get(index).getString("attrName"))) { |
| item.setTitle(attrs.get(index).getString("attrValue")); |
| } else if ("SKU".equals(attrs.get(index).getString("attrName"))) { |
| item.setSKU(attrs.get(index).getString("attrValue")); |
| } else if ("Currency".equals(attrs.get(index).getString("attrName"))) { |
| amount.setCurrencyID(CurrencyCodeType.valueOf(attrs.get(index).getString("attrValue"))); |
| } else if ("Description".equals(attrs.get(index).getString("attrName"))) { |
| item.setDescription(attrs.get(index).getString("attrValue")); |
| } else if ("ApplicationData".equals(attrs.get(index).getString("attrName"))) { |
| item.setApplicationData(attrs.get(index).getString("attrValue")); |
| } else if ("Country".equals(attrs.get(index).getString("attrName"))) { |
| item.setCountry(CountryCodeType.valueOf(attrs.get(index).getString("attrValue"))); |
| } else if ("PictureURL".equals(attrs.get(index).getString("attrName"))) { |
| String[] pictureUrl = {attrs.get(index).getString("attrValue")}; |
| picture.setPictureURL(pictureUrl); |
| } else if ("Site".equals(attrs.get(index).getString("attrName"))) { |
| item.setSite(SiteCodeType.valueOf(attrs.get(index).getString("attrValue"))); |
| } else if ("UseTaxTable".equals(attrs.get(index).getString("attrName"))) { |
| item.setUseTaxTable(Boolean.valueOf(attrs.get(index).getString("attrValue"))); |
| } else if ("BestOfferEnabled".equals(attrs.get(index).getString("attrName"))) { |
| item.setBestOfferEnabled(Boolean.valueOf(attrs.get(index).getString("attrValue"))); |
| } else if ("AutoPayEnabled".equals(attrs.get(index).getString("attrName"))) { |
| item.setAutoPay(Boolean.valueOf(attrs.get(index).getString("attrValue"))); |
| } else if ("CategoryID".equals(attrs.get(index).getString("attrName"))) { |
| category.setCategoryID(attrs.get(index).getString("attrValue")); |
| } else if ("CategoryLevel".equals(attrs.get(index).getString("attrName"))) { |
| category.setCategoryLevel(Integer.parseInt(attrs.get(index).getString("attrValue"))); |
| } else if ("CategoryName".equals(attrs.get(index).getString("attrName"))) { |
| category.setCategoryName(attrs.get(index).getString("attrValue")); |
| } else if ("CategoryParentID".equals(attrs.get(index).getString("attrName"))) { |
| String[] parent = {attrs.get(index).getString("attrValue")}; |
| category.setCategoryParentID(parent ); |
| } else if ("LeafCategory".equals(attrs.get(index).getString("attrName"))) { |
| category.setLeafCategory(Boolean.valueOf(attrs.get(index).getString("attrValue"))); |
| } else if ("LSD".equals(attrs.get(index).getString("attrName"))) { |
| category.setLSD(Boolean.valueOf(attrs.get(index).getString("attrValue"))); |
| } else if ("ReturnsAcceptedOption".equals(attrs.get(index).getString("attrName"))) { |
| ReturnPolicyType policy = new ReturnPolicyType(); |
| policy.setReturnsAcceptedOption(attrs.get(index).getString("attrValue")); |
| item.setReturnPolicy(policy); |
| } else if ("LayoutID".equals(attrs.get(index).getString("attrName"))) { |
| designer.setLayoutID(Integer.parseInt(attrs.get(index).getString("attrValue"))); |
| } else if ("ThemeID".equals(attrs.get(index).getString("attrName"))) { |
| designer.setThemeID(Integer.parseInt(attrs.get(index).getString("attrValue"))); |
| } else if ("BuyItNowPrice".equals(attrs.get(index).getString("attrName"))) { |
| amount = new AmountType(); |
| amount.setValue(Double.parseDouble(attrs.get(index).getString("attrValue"))); |
| item.setBuyItNowPrice(amount); |
| } else if ("ReservePrice".equals(attrs.get(index).getString("attrName"))) { |
| amount = new AmountType(); |
| amount.setValue(Double.parseDouble(attrs.get(index).getString("attrValue"))); |
| item.setReservePrice(amount); |
| } else if ("ListingType".equals(attrs.get(index).getString("attrName"))) { |
| item.setListingType(ListingTypeCodeType.valueOf(attrs.get(index).getString("attrValue"))); |
| } else if ("StartPrice".equals(attrs.get(index).getString("attrName"))) { |
| amount = new AmountType(); |
| amount.setValue(Double.parseDouble(attrs.get(index).getString("attrValue"))); |
| item.setStartPrice(amount); |
| } else if ("ShippingService".equals(attrs.get(index).getString("attrName"))) { |
| shippingOption.setShippingService(attrs.get(index).getString("attrValue")); |
| } else if ("ShippingServiceCost".equals(attrs.get(index).getString("attrName"))) { |
| shippingServiceCost.setValue(Double.parseDouble(attrs.get(index).getString("attrValue"))); |
| shippingOption.setShippingServiceCost(shippingServiceCost); |
| } else if ("ShippingServiceCostCurrency".equals(attrs.get(index).getString("attrName"))) { |
| shippingServiceCost.setCurrencyID(CurrencyCodeType.valueOf(attrs.get(index).getString("attrValue"))); |
| shippingOption.setShippingServiceCost(shippingServiceCost); |
| } else if ("ShippingServicePriority".equals(attrs.get(index).getString("attrName"))) { |
| shippingOption.setShippingServicePriority(Integer.parseInt(attrs.get(index).getString("attrValue"))); |
| } else if ("ShippingType".equals(attrs.get(index).getString("attrName"))) { |
| shippingDetail.setShippingType(ShippingTypeCodeType.valueOf(attrs.get(index).getString("attrValue"))); |
| } else if ("VATPercent".equals(attrs.get(index).getString("attrName"))) { |
| VATDetailsType vat = new VATDetailsType(); |
| vat.setVATPercent(new Float(attrs.get(index).getString("attrValue"))); |
| item.setVATDetails(vat); |
| } else if ("Location".equals(attrs.get(index).getString("attrName"))) { |
| item.setLocation(attrs.get(index).getString("attrValue")); |
| } else if ("Quantity".equals(attrs.get(index).getString("attrName"))) { |
| item.setQuantity(Integer.parseInt(attrs.get(index).getString("attrValue"))); |
| } else if ("ListingDuration".equals(attrs.get(index).getString("attrName"))) { |
| item.setListingDuration(attrs.get(index).getString("attrValue")); |
| } else if ("LotSize".equals(attrs.get(index).getString("attrName"))) { |
| item.setLotSize(Integer.parseInt(attrs.get(index).getString("attrValue"))); |
| } else if ("PostalCode".equals(attrs.get(index).getString("attrName"))) { |
| item.setPostalCode(attrs.get(index).getString("attrValue")); |
| } else if ("Title".equals(attrs.get(index).getString("attrName"))) { |
| item.setTitle(attrs.get(index).getString("attrValue")); |
| } |
| if (category != null) { |
| item.setPrimaryCategory(category); |
| } |
| if (shippingOption != null) { |
| ShippingServiceOptionsType[] options = {shippingOption}; |
| shippingDetail.setShippingServiceOptions(options); |
| } |
| if (shippingDetail != null) { |
| item.setShippingDetails(shippingDetail); |
| } |
| } |
| } catch (GenericEntityException e) { |
| Debug.logError(e.getMessage(), module); |
| return null; |
| } |
| return item; |
| } |
| |
| public static Map<String, Object> uploadTrackingInfoBackToEbay(DispatchContext dctx, Map<String, Object> context) { |
| Delegator delegator = dctx.getDelegator(); |
| Locale locale = (Locale) context.get("locale"); |
| GenericValue userLogin = (GenericValue) context.get("userLogin"); |
| String productStoreId = (String) context.get("productStoreId"); |
| String orderId = (String) context.get("orderId"); |
| GetOrdersRequestType req = new GetOrdersRequestType(); |
| GetOrdersResponseType resp = null; |
| try { |
| GenericValue orderHeader = EntityQuery.use(delegator).from("OrderHeader").where("orderId", orderId).queryOne(); |
| if (orderHeader != null) { |
| String externalId = orderHeader.getString("externalId").toString(); |
| List<GenericValue> orderShipment = orderHeader.getRelated("OrderShipment", null, null, false); |
| if (orderShipment.size() > 0) { |
| List<GenericValue> trackingOrders = orderHeader.getRelated("TrackingCodeOrder", null, null, false); |
| ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator); |
| GetOrdersCall ordersCall = new GetOrdersCall(apiContext); |
| OrderIDArrayType orderIdArr = new OrderIDArrayType(); |
| String[] orderIdStr = {""+externalId}; |
| orderIdArr.setOrderID(orderIdStr); |
| req.setOrderIDArray(orderIdArr); |
| Calendar orderFrom = Calendar.getInstance(); |
| orderFrom.setTime(UtilDateTime.toDate("01/01/2001 00:00:00")); |
| req.setCreateTimeFrom(orderFrom); |
| Calendar orderTo = Calendar.getInstance(); |
| orderTo.setTime(UtilDateTime.nowDate()); |
| req.setCreateTimeTo(orderTo); |
| req.setOrderStatus(OrderStatusCodeType.SHIPPED); |
| req.setOrderRole(TradingRoleCodeType.SELLER); |
| resp = (GetOrdersResponseType) ordersCall.execute(req); |
| if (resp != null && "SUCCESS".equals(resp.getAck().toString())) { |
| OrderArrayType orderArr = resp.getOrderArray(); |
| OrderType[] orderTypeList = orderArr.getOrder(); |
| for (OrderType order : orderTypeList) { |
| String orderID = order.getOrderID(); |
| if (orderID.equals(externalId)) { |
| AddOrderCall addOrderCall = new AddOrderCall(apiContext); |
| AddOrderRequestType addReq = new AddOrderRequestType(); |
| AddOrderResponseType addResp = null; |
| OrderType newOrder = new OrderType(); |
| ShippingDetailsType shippingDetail = order.getShippingDetails(); |
| if (trackingOrders.size() > 0) { |
| ShipmentTrackingDetailsType[] trackDetails = new ShipmentTrackingDetailsType[trackingOrders.size()]; |
| for (int i = 0; i < trackDetails.length; i++) { |
| ShipmentTrackingDetailsType track = new ShipmentTrackingDetailsType(); |
| track.setShipmentTrackingNumber(trackingOrders.get(i).get("trackingCodeId").toString()); |
| trackDetails[i] = track; |
| } |
| shippingDetail.setShipmentTrackingDetails(trackDetails); |
| newOrder.setShippingDetails(shippingDetail); |
| } |
| newOrder.setOrderID(order.getOrderID()); |
| newOrder.setOrderStatus(order.getOrderStatus()); |
| newOrder.setAdjustmentAmount(order.getAdjustmentAmount()); |
| newOrder.setAmountSaved(order.getAmountSaved()); |
| newOrder.setCheckoutStatus(order.getCheckoutStatus()); |
| newOrder.setShippingDetails(order.getShippingDetails()); |
| newOrder.setCreatingUserRole(order.getCreatingUserRole()); |
| newOrder.setCreatedTime(order.getCreatedTime()); |
| newOrder.setPaymentMethods(order.getPaymentMethods()); |
| newOrder.setShippingAddress(order.getShippingAddress()); |
| newOrder.setSubtotal(order.getSubtotal()); |
| newOrder.setTotal(order.getTotal()); |
| newOrder.setTransactionArray(order.getTransactionArray()); |
| newOrder.setBuyerUserID(order.getBuyerUserID()); |
| newOrder.setPaidTime(order.getPaidTime()); |
| newOrder.setShippedTime(order.getShippedTime()); |
| newOrder.setIntegratedMerchantCreditCardEnabled(order.isIntegratedMerchantCreditCardEnabled()); |
| addReq.setOrder(newOrder); |
| addResp = (AddOrderResponseType) addOrderCall.execute(addReq); |
| if (addResp != null && "SUCCESS".equals(addResp.getAck().toString())) { |
| Debug.logInfo("Upload tracking code to eBay success...", module); |
| } else { |
| createErrorLogMessage(userLogin, dctx.getDispatcher(), productStoreId, addResp.getAck().toString(), "Update order : uploadTrackingInfoBackToEbay", addResp.getErrors(0).getLongMessage()); |
| } |
| } |
| } |
| } else { |
| createErrorLogMessage(userLogin, dctx.getDispatcher(), productStoreId, resp.getAck().toString(), "Get order : uploadTrackingInfoBackToEbay", resp.getErrors(0).getLongMessage()); |
| } |
| } |
| } |
| } catch (GenericEntityException gee) { |
| return ServiceUtil.returnError(gee.getMessage()); |
| } catch (Exception e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| return ServiceUtil.returnSuccess(); |
| } |
| |
| public static void createErrorLogMessage(GenericValue userLogin, LocalDispatcher dispatcher, String productStoreId, String ack, String fuction, String errorMessage) { |
| if (!"".equals(productStoreId) && (!"".equals(errorMessage))) { |
| try { |
| Map<String, Object> newMap = new HashMap<String, Object>(); |
| newMap.put("productStoreId", productStoreId); |
| newMap.put("logAck", ack.toLowerCase()); |
| newMap.put("functionName", fuction); |
| newMap.put("logMessage", errorMessage); |
| newMap.put("createDatetime", UtilDateTime.nowTimestamp()); |
| newMap.put("userLogin", userLogin); |
| dispatcher.runSync("insertErrorMessagesFromEbay", newMap); |
| } catch (Exception ex) { |
| Debug.logError("Error from create error log messages : "+ex.getMessage(), module); |
| } |
| } |
| } |
| |
| public static boolean isReserveInventory(Delegator delegator, String productId, String productStoreId) { |
| boolean isReserve = false; |
| try { |
| GenericValue ebayProductStore = EntityQuery.use(delegator).from("EbayProductStoreInventory").where("productStoreId", productStoreId, "productId", productId).filterByDate().queryFirst(); |
| if (ebayProductStore != null) { |
| BigDecimal atp = ebayProductStore.getBigDecimal("availableToPromiseListing"); |
| int intAtp = atp.intValue(); |
| if (intAtp > 0) { |
| isReserve = true; |
| } |
| } |
| } catch (Exception ex) { |
| Debug.logError("Error from get eBay Inventory data : "+ ex.getMessage(), module); |
| } |
| return isReserve; |
| } |
| |
| public static String convertDate(Date date, Locale locale) { |
| SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",locale); |
| return simpleDateFormat.format(date); |
| } |
| } |