in ebay/src/main/java/org/apache/ofbiz/ebay/ImportOrdersFromEbay.java [621:860]
private static Map<String, Object> createShoppingCart(Delegator delegator, LocalDispatcher dispatcher, Locale locale,
Map<String, Object> parameters, boolean create) {
try {
String productStoreId = (String) parameters.get("productStoreId");
GenericValue userLogin = (GenericValue) parameters.get("userLogin");
String defaultCurrencyUomId = "";
String payToPartyId = "";
String facilityId = "";
// Product Store is mandatory
if (productStoreId == null) {
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "ordersImportFromEbay.productStoreIdIsMandatory", locale));
} else {
GenericValue productStore = EntityQuery.use(delegator).from("ProductStore").where("productStoreId", productStoreId).queryOne();
if (productStore != null) {
defaultCurrencyUomId = productStore.getString("defaultCurrencyUomId");
payToPartyId = productStore.getString("payToPartyId");
facilityId = productStore.getString("inventoryFacilityId");
} else {
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "ordersImportFromEbay.productStoreIdIsMandatory", locale));
}
}
// create a new shopping cart
ShoppingCart cart = new ShoppingCart(delegator, productStoreId, locale, defaultCurrencyUomId);
// set the external id with the eBay Item Id
String externalId = (String) parameters.get("externalId");
if (UtilValidate.isNotEmpty(externalId)) {
if (externalOrderExists(delegator, externalId) != null && create) {
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "ordersImportFromEbay.externalIdAlreadyExist", locale));
}
cart.setExternalId(externalId);
} else {
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "ordersImportFromEbay.externalIdNotAvailable", locale));
}
cart.setOrderType("SALES_ORDER");
cart.setChannelType("EBAY_SALES_CHANNEL");
cart.setUserLogin(userLogin, dispatcher);
cart.setProductStoreId(productStoreId);
if (UtilValidate.isNotEmpty(facilityId)) {
cart.setFacilityId(facilityId);
}
String amountStr = (String) parameters.get("amountPaid");
BigDecimal amountPaid = BigDecimal.ZERO;
if (UtilValidate.isNotEmpty(amountStr)) {
amountPaid = new BigDecimal(amountStr);
}
// add the payment EXT_BAY for the paid amount
cart.addPaymentAmount("EXT_EBAY", amountPaid, externalId, null, true, false, false);
// set the order date with the eBay created date
Timestamp orderDate = UtilDateTime.nowTimestamp();
if (UtilValidate.isNotEmpty(parameters.get("createdDate"))) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Date createdDate = sdf.parse((String) parameters.get("createdDate"));
orderDate = new Timestamp(createdDate.getTime());
}
cart.setOrderDate(orderDate);
// check if the producId exists and it is valid
String productId = (String) parameters.get("productId");
if (UtilValidate.isEmpty(productId)) {
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "ordersImportFromEbay.productIdNotAvailable", locale));
} else {
GenericValue product = EntityQuery.use(delegator).from("Product").where("productId", productId).queryOne();
if (UtilValidate.isEmpty(product)) {
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "ordersImportFromEbay.productIdDoesNotExist", locale));
}
}
// Before import the order from eBay to OFBiz is mandatory that the payment has be received
String paidTime = (String) parameters.get("paidTime");
if (UtilValidate.isEmpty(paidTime)) {
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "ordersImportFromEbay.paymentIsStillNotReceived", locale));
}
BigDecimal unitPrice = new BigDecimal((String) parameters.get("transactionPrice"));
BigDecimal quantity = new BigDecimal((String) parameters.get("quantityPurchased"));
cart.addItemToEnd(productId, null, quantity, unitPrice, null, null, null, "PRODUCT_ORDER_ITEM", dispatcher, Boolean.FALSE, Boolean.FALSE);
// set partyId from
if (UtilValidate.isNotEmpty(payToPartyId)) {
cart.setBillFromVendorPartyId(payToPartyId);
}
// Apply shipping costs as order adjustment
String shippingCost = (String) parameters.get("shippingServiceCost");
if (UtilValidate.isNotEmpty(shippingCost)) {
double shippingAmount = Double.parseDouble(shippingCost);
if (shippingAmount > 0) {
GenericValue shippingAdjustment = EbayHelper.makeOrderAdjustment(delegator, "SHIPPING_CHARGES", cart.getOrderId(), null, null,
shippingAmount, 0.0);
if (shippingAdjustment != null) {
cart.addAdjustment(shippingAdjustment);
}
}
}
// Apply additional shipping costs as order adjustment
String shippingTotalAdditionalCost = (String) parameters.get("shippingTotalAdditionalCost");
if (UtilValidate.isNotEmpty(shippingTotalAdditionalCost)) {
double shippingAdditionalCost = Double.parseDouble(shippingTotalAdditionalCost);
if (shippingAdditionalCost > 0) {
GenericValue shippingAdjustment = EbayHelper.makeOrderAdjustment(delegator, "MISCELLANEOUS_CHARGE", cart.getOrderId(), null,
null, shippingAdditionalCost, 0.0);
if (shippingAdjustment != null) {
cart.addAdjustment(shippingAdjustment);
}
}
}
// Apply sales tax as order adjustment
String salesTaxAmount = (String) parameters.get("salesTaxAmount");
String salesTaxPercent = (String) parameters.get("salesTaxPercent");
if (UtilValidate.isNotEmpty(salesTaxAmount)) {
double salesTaxAmountTotal = Double.parseDouble(salesTaxAmount);
if (salesTaxAmountTotal > 0) {
double salesPercent = 0.0;
if (UtilValidate.isNotEmpty(salesTaxPercent)) {
salesPercent = Double.parseDouble(salesTaxPercent);
}
GenericValue salesTaxAdjustment = EbayHelper.makeOrderAdjustment(delegator, "SALES_TAX", cart.getOrderId(), null, null,
salesTaxAmountTotal, salesPercent);
if (salesTaxAdjustment != null) {
cart.addAdjustment(salesTaxAdjustment);
}
}
}
// order has to be created ?
if (create) {
Debug.logInfo("Importing new order from eBay", MODULE);
// set partyId to
String partyId = null;
String contactMechId = "";
GenericValue partyAttribute = null;
if (UtilValidate.isNotEmpty(parameters.get("eiasTokenBuyer"))) {
partyAttribute = EntityQuery.use(delegator)
.from("PartyAttribute")
.where("attrValue", parameters.get("eiasTokenBuyer"))
.queryFirst();
}
// if we get a party, check its contact information.
if (UtilValidate.isNotEmpty(partyAttribute)) {
partyId = (String) partyAttribute.get("partyId");
Debug.logInfo("Found existing party associated to the eBay buyer: " + partyId, MODULE);
GenericValue party = EntityQuery.use(delegator).from("Party").where("partyId", partyId).queryOne();
contactMechId = EbayHelper.setShippingAddressContactMech(dispatcher, delegator, party, userLogin, parameters);
String emailBuyer = (String) parameters.get("emailBuyer");
if (!("".equals(emailBuyer) || "Invalid Request".equalsIgnoreCase(emailBuyer))) {
EbayHelper.setEmailContactMech(dispatcher, delegator, party, userLogin, parameters);
}
EbayHelper.setPhoneContactMech(dispatcher, delegator, party, userLogin, parameters);
}
// create party if none exists already
if (UtilValidate.isEmpty(partyId)) {
Debug.logInfo("Creating new party for the eBay buyer.", MODULE);
partyId = EbayHelper.createCustomerParty(dispatcher, (String) parameters.get("buyerName"), userLogin);
if (UtilValidate.isEmpty(partyId)) {
Debug.logWarning("Using admin party for the eBay buyer.", MODULE);
partyId = "admin";
}
}
// create new party's contact information
if (UtilValidate.isEmpty(contactMechId)) {
Debug.logInfo("Creating new postal address for party: " + partyId, MODULE);
contactMechId = EbayHelper.createAddress(dispatcher, partyId, userLogin, "SHIPPING_LOCATION", parameters);
if (UtilValidate.isEmpty(contactMechId)) {
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "EbayUnableToCreatePostalAddress", locale) + parameters);
}
Debug.logInfo("Created postal address: " + contactMechId, MODULE);
Debug.logInfo("Creating new phone number for party: " + partyId, MODULE);
EbayHelper.createPartyPhone(dispatcher, partyId, (String) parameters.get("shippingAddressPhone"), userLogin);
Debug.logInfo("Creating association to eBay buyer for party: " + partyId, MODULE);
EbayHelper.createEbayCustomer(dispatcher, partyId, (String) parameters.get("ebayUserIdBuyer"), (String) parameters.get(
"eiasTokenBuyer"), userLogin);
String emailBuyer = (String) parameters.get("emailBuyer");
if (UtilValidate.isNotEmpty(emailBuyer) && !"Invalid Request".equalsIgnoreCase(emailBuyer)) {
Debug.logInfo("Creating new email for party: " + partyId, MODULE);
EbayHelper.createPartyEmail(dispatcher, partyId, emailBuyer, userLogin);
}
}
Debug.logInfo("Setting cart roles for party: " + partyId, MODULE);
cart.setBillToCustomerPartyId(partyId);
cart.setPlacingCustomerPartyId(partyId);
cart.setShipToCustomerPartyId(partyId);
cart.setEndUserCustomerPartyId(partyId);
Debug.logInfo("Setting contact mech in cart: " + contactMechId, MODULE);
cart.setAllShippingContactMechId(contactMechId);
cart.setAllMaySplit(Boolean.FALSE);
Debug.logInfo("Setting shipment method: " + (String) parameters.get("shippingService"), MODULE);
EbayHelper.setShipmentMethodType(cart, (String) parameters.get("shippingService"), productStoreId, delegator);
cart.makeAllShipGroupInfos(dispatcher);
// create the order
Debug.logInfo("Creating CheckOutHelper.", MODULE);
CheckOutHelper checkout = new CheckOutHelper(dispatcher, delegator, cart);
Debug.logInfo("Creating order.", MODULE);
Map<String, Object> orderCreate = checkout.createOrder(userLogin);
String orderId = (String) orderCreate.get("orderId");
Debug.logInfo("Created order with id: " + orderId, MODULE);
// approve the order
if (UtilValidate.isNotEmpty(orderId)) {
Debug.logInfo("Approving order with id: " + orderId, MODULE);
boolean approved = OrderChangeHelper.approveOrder(dispatcher, userLogin, orderId);
Debug.logInfo("Order approved with result: " + approved, MODULE);
// create the payment from the preference
if (approved) {
Debug.logInfo("Creating payment for approved order.", MODULE);
EbayHelper.createPaymentFromPaymentPreferences(delegator, dispatcher, userLogin, orderId, externalId, cart.getOrderDate(),
amountPaid, partyId);
Debug.logInfo("Payment created.", MODULE);
}
}
}
} catch (Exception e) {
Debug.logError("Exception in createShoppingCart: " + e.getMessage(), MODULE);
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "ordersImportFromEbay.exceptionInCreateShoppingCart", locale) + ":"
+ " " + e.getMessage());
}
return ServiceUtil.returnSuccess();
}