You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2009/05/30 19:47:09 UTC
svn commit: r780306 - in /ofbiz/trunk/specialpurpose/googlecheckout: config/
data/ entitydef/ src/org/ofbiz/googlecheckout/
Author: jaz
Date: Sat May 30 17:47:08 2009
New Revision: 780306
URL: http://svn.apache.org/viewvc?rev=780306&view=rev
Log:
implemented data driven configuration for google checkout; basic configuration now is configured using the GoogleConfiguration entity. Allowing each product store to have completely different settings. Moved the the static URLs to a new properties file which will remain if/when the old code is deprecated.
Added:
ofbiz/trunk/specialpurpose/googlecheckout/config/google-checkout.properties
Modified:
ofbiz/trunk/specialpurpose/googlecheckout/config/googleCheckout.properties
ofbiz/trunk/specialpurpose/googlecheckout/data/GoogleCheckoutTypeData.xml
ofbiz/trunk/specialpurpose/googlecheckout/entitydef/entitymodel.xml
ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java
ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutResponseEvents.java
ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleRequestServices.java
Added: ofbiz/trunk/specialpurpose/googlecheckout/config/google-checkout.properties
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/googlecheckout/config/google-checkout.properties?rev=780306&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/googlecheckout/config/google-checkout.properties (added)
+++ ofbiz/trunk/specialpurpose/googlecheckout/config/google-checkout.properties Sat May 30 17:47:08 2009
@@ -0,0 +1,35 @@
+#####################################################################
+# 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.
+#####################################################################
+
+# These are static configuration variable which could easily be hard coded.
+# However, in case they ever do change they should be easy to modify so
+# they are configured here.
+
+# Production server URL
+production.root.url = https://checkout.google.com/api/checkout/v2
+
+# Sandbox server URL
+sandbox.root.url = https://sandbox.google.com/checkout/api/checkout/v2
+
+# Request Commands
+merchant.checkout.command = merchantCheckout
+checkout.command = checkout
+request.command = request
+diagnose.command = diagnose
+
Modified: ofbiz/trunk/specialpurpose/googlecheckout/config/googleCheckout.properties
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/googlecheckout/config/googleCheckout.properties?rev=780306&r1=780305&r2=780306&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/googlecheckout/config/googleCheckout.properties (original)
+++ ofbiz/trunk/specialpurpose/googlecheckout/config/googleCheckout.properties Sat May 30 17:47:08 2009
@@ -56,19 +56,3 @@
checkout = /checkout
request = /request
diagnose = /diagnose
-
-### Notification API and Order Processing API URLs -- NOTE: we should migrate the above urls to build upon these instead
-
-# use Sandbox or Production
-environment.mode = Sandbox
-
-production.root.url = https://checkout.google.com/api/checkout/v2
-sandbox.root.url = https://sandbox.google.com/checkout/api/checkout/v2
-
-merchant.checkout.command = merchantCheckout
-checkout.command = checkout
-request.command = request
-
-
-
-
Modified: ofbiz/trunk/specialpurpose/googlecheckout/data/GoogleCheckoutTypeData.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/googlecheckout/data/GoogleCheckoutTypeData.xml?rev=780306&r1=780305&r2=780306&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/googlecheckout/data/GoogleCheckoutTypeData.xml (original)
+++ ofbiz/trunk/specialpurpose/googlecheckout/data/GoogleCheckoutTypeData.xml Sat May 30 17:47:08 2009
@@ -23,6 +23,10 @@
<PaymentMethodType description="Google Checkout" paymentMethodTypeId="EXT_GOOGLE_CHECKOUT"/>
<WebSite webSiteId="GOOGLECHECKOUT" siteName="Google Checkout Application" visualThemeSetId="BACKOFFICE"/>
+ <EnumerationType description="Google Environment Types" enumTypeId="GOOGLE_ENV_TYPE" hasTable="N" parentTypeId=""/>
+ <Enumeration description="Sandbox" enumCode="SANDBOX" enumId="GOOGLE_SANDBOX" sequenceId="01" enumTypeId="GOOGLE_ENV_TYPE"/>
+ <Enumeration description="Production" enumCode="PRODUCTION" enumId="GOOGLE_PRODUCTION" sequenceId="02" enumTypeId="GOOGLE_ENV_TYPE"/>
+
<EnumerationType description="Google Checkout Ship Types" enumTypeId="GOOGLE_SHIP_TYPE" hasTable="N" parentTypeId=""/>
<Enumeration description="Flat Rate Shipping" enumCode="FLAT_RATE" enumId="GOOGLE_FLAT_RATE" sequenceId="01" enumTypeId="GOOGLE_SHIP_TYPE"/>
<Enumeration description="Merchant Calculated Shipping" enumCode="MERCHANT_CALC" enumId="GOOGLE_MERCHANT_CALC" sequenceId="02" enumTypeId="GOOGLE_SHIP_TYPE"/>
Modified: ofbiz/trunk/specialpurpose/googlecheckout/entitydef/entitymodel.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/googlecheckout/entitydef/entitymodel.xml?rev=780306&r1=780305&r2=780306&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/googlecheckout/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/specialpurpose/googlecheckout/entitydef/entitymodel.xml Sat May 30 17:47:08 2009
@@ -40,28 +40,40 @@
<!-- ========================================================= -->
<!-- org.ofbiz.googlecheckout.config -->
<!-- ========================================================= -->
- <!--
+
<entity entity-name="GoogleConfiguration"
package-name="org.ofbiz.googlecheckout.config"
title="Google Checkout Configuration">
- <field name="merchantId" type="id-ne"></field>
- <field name="merchantKey" type="value"></field>
- <field name="environment" type="name"></field>
- <field name="productStoreId" type="id-ne"></field>
- <field name="webSiteId" type="id"></field>
- <field name="prodCatalogId" type="id"></field>
- <prim-key field="merchantId"/>
- <relation type="one" fk-name="GCC_PROD_STORE" rel-entity-name="ProductStore">
- <key-map field-name="productStoreId"/>
- </relation>
- <relation type="one" fk-name="GCC_WEBSITE" rel-entity-name="WebSite">
- <key-map field-name="webSiteId"/>
- </relation>
- <relation type="one" fk-name="GCC_PROD_CAT" rel-entity-name="ProdCatalog">
- <key-map field-name="prodCatalogId"/>
- </relation>
+ <field name="productStoreId" type="id-ne"></field>
+ <field name="merchantId" type="value"></field>
+ <field name="merchantKey" type="value"></field>
+ <field name="envEnumId" type="id-ne"></field>
+ <field name="webSiteId" type="id-ne"></field>
+ <field name="prodCatalogId" type="id-ne"></field>
+ <field name="currencyUomId" type="id-ne"></field>
+ <field name="requestAuthDetails" type="indicator"></field>
+ <field name="requestPhone" type="indicator"></field>
+ <field name="sendPromoItems" type="indicator"></field>
+ <field name="errorOnBadItem" type="indicator"></field>
+ <field name="acceptCoupons" type="indicator"></field>
+ <field name="acceptGiftCerts" type="indicator"></field>
+ <prim-key field="productStoreId"/>
+ <relation type="one" fk-name="GCC_PROD_STORE" rel-entity-name="ProductStore">
+ <key-map field-name="productStoreId"/>
+ </relation>
+ <relation type="one" fk-name="GCC_ENV_ENUM" rel-entity-name="Enumeration">
+ <key-map field-name="envEnumId" rel-field-name="enumId"/>
+ </relation>
+ <relation type="one" fk-name="GCC_WEBSITE" rel-entity-name="WebSite">
+ <key-map field-name="webSiteId"/>
+ </relation>
+ <relation type="one" fk-name="GCC_PROD_CAT" rel-entity-name="ProdCatalog">
+ <key-map field-name="prodCatalogId"/>
+ </relation>
+ <relation type="one" fk-name="GCC_CUOM" rel-entity-name="Uom">
+ <key-map field-name="currencyUomId" rel-field-name="uomId"/>
+ </relation>
</entity>
- -->
<!-- ========================================================= -->
<!-- org.ofbiz.googlecheckout.shipping -->
@@ -70,27 +82,27 @@
<entity entity-name="GoogleShippingMethods"
package-name="org.ofbiz.googlecheckout.shipping"
title="Google Shipping Method Config">
- <field name="shipmentMethodName" type="id-ne"></field>
- <field name="productStoreId" type="id-ne"></field>
- <field name="amount" type="currency-amount"></field>
- <field name="additionalAmount" type="currency-amount"></field>
- <field name="additionalPercent" type="fixed-point"></field>
- <field name="methodTypeEnumId" type="id-ne"></field>
- <field name="carrierPartyId" type="id-ne"></field>
- <field name="shipmentMethodTypeId" type="id-ne"></field>
- <prim-key field="shipmentMethodName"/>
- <prim-key field="productStoreId"/>
- <relation type="one" fk-name="GSM_PROD_STORE" rel-entity-name="ProductStore">
- <key-map field-name="productStoreId"/>
- </relation>
- <relation type="one" fk-name="GSM_TYPE_ENUM" rel-entity-name="Enumeration">
- <key-map field-name="methodTypeEnumId" rel-field-name="enumId"/>
- </relation>
- <relation type="one" fk-name="GSM_CARRIER_PARTY" rel-entity-name="Party">
- <key-map field-name="carrierPartyId" rel-field-name="partyId"/>
- </relation>
- <relation type="one" fk-name="GSM_SHIPMETH_TYPE" rel-entity-name="ShipmentMethodType">
- <key-map field-name="shipmentMethodTypeId"/>
- </relation>
+ <field name="shipmentMethodName" type="id-ne"></field>
+ <field name="productStoreId" type="id-ne"></field>
+ <field name="amount" type="currency-amount"></field>
+ <field name="additionalAmount" type="currency-amount"></field>
+ <field name="additionalPercent" type="fixed-point"></field>
+ <field name="methodTypeEnumId" type="id-ne"></field>
+ <field name="carrierPartyId" type="id-ne"></field>
+ <field name="shipmentMethodTypeId" type="id-ne"></field>
+ <prim-key field="shipmentMethodName"/>
+ <prim-key field="productStoreId"/>
+ <relation type="one" fk-name="GSM_PROD_STORE" rel-entity-name="ProductStore">
+ <key-map field-name="productStoreId"/>
+ </relation>
+ <relation type="one" fk-name="GSM_TYPE_ENUM" rel-entity-name="Enumeration">
+ <key-map field-name="methodTypeEnumId" rel-field-name="enumId"/>
+ </relation>
+ <relation type="one" fk-name="GSM_CARRIER_PARTY" rel-entity-name="Party">
+ <key-map field-name="carrierPartyId" rel-field-name="partyId"/>
+ </relation>
+ <relation type="one" fk-name="GSM_SHIPMETH_TYPE" rel-entity-name="ShipmentMethodType">
+ <key-map field-name="shipmentMethodTypeId"/>
+ </relation>
</entity>
</entitymodel>
\ No newline at end of file
Modified: ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java?rev=780306&r1=780305&r2=780306&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java (original)
+++ ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutHelper.java Sat May 30 17:47:08 2009
@@ -63,8 +63,7 @@
public class GoogleCheckoutHelper {
- private static final String module = GoogleCheckoutHelper.class.getName();
- private static final boolean errorOnUnknownItem = true; // set to false to simply ignore the item
+ private static final String module = GoogleCheckoutHelper.class.getName();
public static final String SALES_CHANNEL = "GC_SALES_CHANNEL";
public static final String ORDER_TYPE = "SALES_ORDER";
@@ -158,7 +157,7 @@
}
@SuppressWarnings("unchecked")
- public void createOrder(NewOrderNotification info, String productStoreId, String websiteId, String currencyUom, Locale locale) throws GeneralException {
+ public void createOrder(NewOrderNotification info, String productStoreId, Locale locale) throws GeneralException {
// get the google order number
String externalId = info.getGoogleOrderNumber();
@@ -170,11 +169,23 @@
return;
}
+ // get the config object
+ GenericValue googleCfg = GoogleRequestServices.getGoogleConfiguration(delegator, productStoreId);
+ if (googleCfg == null) {
+ throw new GeneralException("No google configuration found for product store : " + productStoreId);
+ }
+
+ String websiteId = googleCfg.getString("webSiteId");
+ String currencyUom = googleCfg.getString("currencyUomId");
+ String prodCatalogId = googleCfg.getString("prodCatalogId");
+ boolean errorOnUnknownItem = googleCfg.get("errorOnBadItem") != null &&
+ "Y".equalsIgnoreCase(googleCfg.getString("errorOnBadItem")) ? true : false;
+
// Initialize the shopping cart
- ShoppingCart cart = new ShoppingCart(delegator, productStoreId, websiteId, locale, currencyUom);
+ ShoppingCart cart = new ShoppingCart(delegator, productStoreId, websiteId, locale, currencyUom);
cart.setUserLogin(system, dispatcher);
cart.setOrderType(ORDER_TYPE);
- cart.setChannelType(SALES_CHANNEL);
+ cart.setChannelType(SALES_CHANNEL);
//cart.setOrderDate(UtilDateTime.toTimestamp(info.getTimestamp().()));
cart.setExternalId(externalId);
@@ -218,7 +229,7 @@
Collection<Item> items = info.getShoppingCart().getItems();
for (Item item : items) {
try {
- addItem(cart, item, null, 0);
+ addItem(cart, item, prodCatalogId, 0);
} catch (ItemNotFoundException e) {
Debug.logWarning(e, "Item was not found : " + item.getMerchantItemId(), module);
// throwing this exception tell google the order failed; it will continue to retry
@@ -262,7 +273,7 @@
}
}
- protected void addItem(ShoppingCart cart, Item item, String productCatalogId, int groupIdx) throws GeneralException {
+ protected void addItem(ShoppingCart cart, Item item, String prodCatalogId, int groupIdx) throws GeneralException {
String productId = item.getMerchantItemId();
BigDecimal qty = new BigDecimal(item.getQuantity());
BigDecimal price = new BigDecimal(item.getUnitPriceAmount());
@@ -271,7 +282,7 @@
HashMap<Object, Object> attrs = new HashMap<Object, Object>();
attrs.put("shipGroup", groupIdx);
- int idx = cart.addItemToEnd(productId, null, qty, null, null, attrs, productCatalogId, null, dispatcher, Boolean.FALSE, Boolean.TRUE, Boolean.TRUE, Boolean.TRUE);
+ int idx = cart.addItemToEnd(productId, null, qty, null, null, attrs, prodCatalogId, null, dispatcher, Boolean.FALSE, Boolean.TRUE, Boolean.TRUE, Boolean.TRUE);
ShoppingCartItem cartItem = cart.findCartItem(idx);
cartItem.setQuantity(qty, dispatcher, cart, true, false);
Modified: ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutResponseEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutResponseEvents.java?rev=780306&r1=780305&r2=780306&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutResponseEvents.java (original)
+++ ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleCheckoutResponseEvents.java Sat May 30 17:47:08 2009
@@ -20,17 +20,12 @@
import java.io.IOException;
import java.io.PrintWriter;
-import java.util.Locale;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.GeneralException;
-import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.entity.GenericDelegator;
-import org.ofbiz.entity.GenericEntityException;
-import org.ofbiz.entity.GenericValue;
import org.ofbiz.product.store.ProductStoreWorker;
import org.ofbiz.service.LocalDispatcher;
import org.w3c.dom.Document;
@@ -72,10 +67,10 @@
String nodeValue = document.getDocumentElement().getNodeName();
if ("new-order-notification".equals(nodeValue)) {
// handle create new order
- NewOrderNotification info = new NewOrderNotification(document);
+ NewOrderNotification info = new NewOrderNotification(document);
String serialNumber = info.getSerialNumber();
try {
- helper.createOrder(info, getProductStoreId(request), getWebsiteId(request), getCurrencyUom(request), getLocale(request));
+ helper.createOrder(info, ProductStoreWorker.getProductStoreId(request), ProductStoreWorker.getStoreLocale(request));
sendResponse(response, serialNumber, false);
} catch (GeneralException e) {
Debug.logError(e, module);
@@ -175,46 +170,5 @@
out.close();
}
}
- }
-
- private static String getWebsiteId(HttpServletRequest request) {
- return (String) request.getSession().getAttribute("webSiteId");
- }
-
- private static String getProductStoreId(HttpServletRequest request) {
- return ProductStoreWorker.getProductStoreId(request);
- }
-
- private static String getCurrencyUom(HttpServletRequest request) {
- GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
- String productStoreId = getProductStoreId(request);
- GenericValue productStore = null;
- try {
- productStore = delegator.findOne("ProductStore", true, "productStoreId", productStoreId);
- } catch (GenericEntityException e) {
- Debug.logError(e, module);
- }
- if (productStore != null) {
- return productStore.getString("defaultCurrencyUomId");
- }
- return null;
- }
-
- private static Locale getLocale(HttpServletRequest request) {
- GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
- String productStoreId = getProductStoreId(request);
- GenericValue productStore = null;
- try {
- productStore = delegator.findOne("ProductStore", true, "productStoreId", productStoreId);
- } catch (GenericEntityException e) {
- Debug.logError(e, module);
- }
- if (productStore != null) {
- String localeStr = productStore.getString("defaultLocaleString");
- if (localeStr != null) {
- return UtilMisc.parseLocale(localeStr);
- }
- }
- return null;
- }
+ }
}
Modified: ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleRequestServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleRequestServices.java?rev=780306&r1=780305&r2=780306&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleRequestServices.java (original)
+++ ofbiz/trunk/specialpurpose/googlecheckout/src/org/ofbiz/googlecheckout/GoogleRequestServices.java Sat May 30 17:47:08 2009
@@ -19,7 +19,6 @@
package org.ofbiz.googlecheckout;
-import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@@ -63,7 +62,8 @@
ShoppingCart cart = (ShoppingCart) context.get("shoppingCart");
String productStoreId = cart.getProductStoreId();
GenericDelegator delegator = dctx.getDelegator();
- MerchantInfo mInfo = getMerchantInfo();
+ GenericValue googleCfg = getGoogleConfiguration(delegator, productStoreId);
+ MerchantInfo mInfo = getMerchantInfo(delegator, productStoreId);
if (mInfo == null) {
Debug.logError("Invalid Google Chechout Merchant settings, check your configuration!", module);
return ServiceUtil.returnError("Google checkout configuration error");
@@ -71,23 +71,36 @@
// the checkout request object
CheckoutShoppingCartRequest req = new CheckoutShoppingCartRequest(mInfo, 300);
- req.setRequestInitialAuthDetails(true); // send the auth notification
+ String requestAuthStr = googleCfg.getString("requestAuthDetails");
+ if (requestAuthStr == null) {
+ requestAuthStr = "Y";
+ }
+ boolean requestAuth = "Y".equalsIgnoreCase(requestAuthStr) ? true : false;
+ req.setRequestInitialAuthDetails(requestAuth); // send the auth notification
+
+ String sendPromoItemStr = googleCfg.getString("sendPromoItems");
+ if (sendPromoItemStr == null) {
+ sendPromoItemStr = "Y";
+ }
+ boolean sendPromoItems = "Y".equalsIgnoreCase(sendPromoItemStr) ? true : false;
// add the items
List<ShoppingCartItem> items = cart.items();
- for (ShoppingCartItem item : items) {
- Item i = new Item();
- i.setItemName(item.getName());
- i.setItemDescription(item.getDescription());
- i.setMerchantItemId(item.getProductId());
- i.setQuantity(item.getQuantity().intValue());
- i.setUnitPriceAmount(item.getBasePrice().floatValue());
- i.setUnitPriceCurrency(cart.getCurrency());
- //i.setItemWeight(item.getWeight().floatValue()); // must convert weight to Lb
- if (!item.taxApplies()) {
- i.setTaxTableSelector("tax_exempt");
+ for (ShoppingCartItem item : items) {
+ if (!item.getIsPromo() || sendPromoItems) {
+ Item i = new Item();
+ i.setItemName(item.getName());
+ i.setItemDescription(item.getDescription());
+ i.setMerchantItemId(item.getProductId());
+ i.setQuantity(item.getQuantity().intValue());
+ i.setUnitPriceAmount(item.getBasePrice().floatValue());
+ i.setUnitPriceCurrency(cart.getCurrency());
+ //i.setItemWeight(item.getWeight().floatValue()); // must convert weight to Lb
+ if (!item.taxApplies()) {
+ i.setTaxTableSelector("tax_exempt");
+ }
+ req.addItem(i);
}
- req.addItem(i);
}
// flow support URLs
@@ -154,9 +167,31 @@
}
// merchant stuff
- //req.setAcceptMerchantCoupons(false); // disable coupons through google
- //req.setAcceptMerchantGiftCertificates(false); // disable gift certs through google
- req.setRequestBuyerPhoneNumber(true);
+ String acceptCouponStr = googleCfg.getString("acceptCoupons");
+ if (acceptCouponStr == null) {
+ acceptCouponStr = "N";
+ }
+ boolean acceptCoupons = "Y".equalsIgnoreCase(acceptCouponStr) ? true : false;
+
+ String acceptCertStr = googleCfg.getString("acceptGiftCerts");
+ if (acceptCertStr == null) {
+ acceptCertStr = "N";
+ }
+ boolean acceptGiftCerts = "Y".equalsIgnoreCase(acceptCertStr) ? true : false;
+
+ if (acceptCoupons || acceptGiftCerts) {
+ req.setAcceptMerchantCoupons(acceptCoupons);
+ req.setAcceptMerchantGiftCertificates(acceptGiftCerts);
+
+ // TODO: merchant calc support needs to be implemented if these are ever TRUE
+ }
+
+ String requestPhoneStr = googleCfg.getString("requestPhone");
+ if (requestPhoneStr == null) {
+ requestPhoneStr = "Y";
+ }
+ boolean requestPhone = "Y".equalsIgnoreCase(requestPhoneStr) ? true : false;
+ req.setRequestBuyerPhoneNumber(requestPhone);
// send the request
CheckoutResponse resp = null;
@@ -185,7 +220,7 @@
String orderId = (String) context.get("orderId");
GenericValue order = findGoogleOrder(delegator, orderId);
if (order != null) {
- MerchantInfo mInfo = getMerchantInfo();
+ MerchantInfo mInfo = getMerchantInfo(delegator, getProductStoreFromOrder(order));
if (mInfo != null) {
String externalId = order.getString("externalId");
AddMerchantOrderNumberRequest aor = new AddMerchantOrderNumberRequest(mInfo, externalId, orderId);
@@ -205,7 +240,7 @@
String orderId = (String) context.get("orderId");
GenericValue order = findGoogleOrder(delegator, orderId);
if (order != null) {
- MerchantInfo mInfo = getMerchantInfo();
+ MerchantInfo mInfo = getMerchantInfo(delegator, getProductStoreFromOrder(order));
if (mInfo != null) {
String externalId = order.getString("externalId");
AuthorizeOrderRequest aor = new AuthorizeOrderRequest(mInfo, externalId);
@@ -226,7 +261,7 @@
String orderId = (String) context.get("orderId");
GenericValue order = findGoogleOrder(delegator, orderId);
if (order != null) {
- MerchantInfo mInfo = getMerchantInfo();
+ MerchantInfo mInfo = getMerchantInfo(delegator, getProductStoreFromOrder(order));
if (mInfo != null) {
String externalId = order.getString("externalId");
Double amountToCharge = (Double) context.get("captureAmount");
@@ -258,15 +293,13 @@
public static Map<String, Object> sendShipRequest(DispatchContext dctx, Map<String, ? extends Object> context) {
GenericDelegator delegator = dctx.getDelegator();
- String shipmentId = (String) context.get("shipmentId");
- MerchantInfo mInfo = getMerchantInfo();
- if (mInfo != null) {
- try {
- sendItemsShipped(delegator, shipmentId, mInfo);
- } catch (GeneralException e) {
- // TODO: handle the error
- }
- }
+ String shipmentId = (String) context.get("shipmentId");
+ try {
+ sendItemsShipped(delegator, shipmentId);
+ } catch (GeneralException e) {
+ // TODO: handle the error
+ }
+
return ServiceUtil.returnSuccess();
}
@@ -275,7 +308,7 @@
String orderId = (String) context.get("orderId");
GenericValue order = findGoogleOrder(delegator, orderId);
if (order != null) {
- MerchantInfo mInfo = getMerchantInfo();
+ MerchantInfo mInfo = getMerchantInfo(delegator, getProductStoreFromOrder(order));
if (mInfo != null) {
String externalId = order.getString("externalId");
CancelOrderRequest cor = new CancelOrderRequest(mInfo, externalId, "Order Cancelled", ""); // TODO: configure the reason and comment
@@ -304,7 +337,7 @@
}
if (orderItem != null) {
- MerchantInfo mInfo = getMerchantInfo();
+ MerchantInfo mInfo = getMerchantInfo(delegator, getProductStoreFromOrder(order));
if (mInfo != null) {
String externalId = order.getString("externalId");
CancelItemsRequest cir = new CancelItemsRequest(mInfo, externalId, "Item Cancelled", ""); // TODO: configure the reason and comment
@@ -326,7 +359,7 @@
String orderId = (String) context.get("orderId");
GenericValue order = findGoogleOrder(delegator, orderId);
if (order != null) {
- MerchantInfo mInfo = getMerchantInfo();
+ MerchantInfo mInfo = getMerchantInfo(delegator, getProductStoreFromOrder(order));
if (mInfo != null) {
String externalId = order.getString("externalId");
ArchiveOrderRequest aor = new ArchiveOrderRequest(mInfo, externalId);
@@ -346,7 +379,7 @@
String orderId = (String) context.get("orderId");
GenericValue order = findGoogleOrder(delegator, orderId);
if (order != null) {
- MerchantInfo mInfo = getMerchantInfo();
+ MerchantInfo mInfo = getMerchantInfo(delegator, getProductStoreFromOrder(order));
if (mInfo != null) {
String externalId = order.getString("externalId");
UnarchiveOrderRequest uor = new UnarchiveOrderRequest(mInfo, externalId);
@@ -373,7 +406,7 @@
return ServiceUtil.returnSuccess();
}
- private static void sendItemsShipped(GenericDelegator delegator, String shipmentId, MerchantInfo mInfo) throws GeneralException {
+ private static void sendItemsShipped(GenericDelegator delegator, String shipmentId) throws GeneralException {
List<GenericValue> issued = delegator.findByAnd("ItemIssuance", UtilMisc.toMap("shipmentId", shipmentId));
if (issued != null && issued.size() > 0) {
for (GenericValue issue : issued) {
@@ -384,6 +417,12 @@
GenericValue order = findGoogleOrder(delegator, orderId);
if (order != null) {
+ MerchantInfo mInfo = getMerchantInfo(delegator, getProductStoreFromOrder(order));
+ if (mInfo == null) {
+ Debug.logInfo("Cannot find Google MerchantInfo for Order #" + orderId, module);
+ continue;
+ }
+
String externalId = order.getString("externalId");
// locate the shipment package content record
@@ -414,6 +453,8 @@
try {
ShipItemsRequest isr = new ShipItemsRequest(mInfo, externalId);
isr.addItemShippingInformation(productId, carrier, track);
+ Debug.logInfo("Sending item shipped notification: " + productId + " / " + carrier + " / " + track, module);
+ Debug.logInfo("Using merchantInfo : " + mInfo.getMerchantId() + " #" + externalId, module);
isr.send();
} catch (CheckoutException e) {
Debug.logError(e, module);
@@ -446,40 +487,82 @@
return null;
}
-
- public static MerchantInfo getMerchantInfo() {
+
+ public static String getProductStoreFromShipment(GenericDelegator delegator, String shipmentId) {
+ GenericValue shipment = null;
+ try {
+ shipment = delegator.findOne("Shipment", false, "shipmentId", shipmentId);
+ } catch (GenericEntityException e) {
+ Debug.logError(e, module);
+ }
+ if (shipment != null) {
+ String orderId = shipment.getString("primaryOrderId");
+ return getProductStoreFromOrder(findGoogleOrder(delegator, orderId));
+ }
+ return null;
+ }
+
+ public static String getProductStoreFromOrder(GenericValue order) {
+ if (order != null) {
+ return order.getString("productStoreId");
+ }
+ return null;
+ }
+
+ public static GenericValue getGoogleConfiguration(GenericDelegator delegator, String productStoreId) {
+ if (productStoreId == null) return null;
+ GenericValue config = null;
+ try {
+ config = delegator.findOne("GoogleConfiguration", true, "productStoreId", productStoreId);
+ } catch (GenericEntityException e) {
+ Debug.logError(e, module);
+ }
+ return config;
+ }
+
+ public static MerchantInfo getMerchantInfo(GenericDelegator delegator, String productStoreId) {
+ // google configuration
+ GenericValue config = getGoogleConfiguration(delegator, productStoreId);
+ if (config == null) {
+ Debug.logError("No google configuration found for product store ID : " + productStoreId, module);
+ return null;
+ }
+
// merchant information
- String merchantId = UtilProperties.getPropertyValue("googleCheckout.properties", "merchantId");
- String merchantKey = UtilProperties.getPropertyValue("googleCheckout.properties", "merchantKey");
- String environment = UtilProperties.getPropertyValue("googleCheckout.properties", "environment.mode", "Sandbox");
- String currencyCode = "USD";
+ String merchantId = config.getString("merchantId");
+ String merchantKey = config.getString("merchantKey");
+ String envEnumId = config.getString("envEnumId");
+ String currencyCode = config.getString("currencyUomId");
if (UtilValidate.isEmpty(merchantId) || UtilValidate.isEmpty(merchantKey)) {
return null;
}
// base URLs
- String productionRoot = UtilProperties.getPropertyValue("googleCheckout.properties", "production.root.url");
- String sandboxRoot = UtilProperties.getPropertyValue("googleCheckout.properties", "sandbox.root.url");
+ String productionRoot = UtilProperties.getPropertyValue("google-checkout.properties", "production.root.url");
+ String sandboxRoot = UtilProperties.getPropertyValue("google-checkout.properties", "sandbox.root.url");
// command strings
- String merchantCheckoutCommand = UtilProperties.getPropertyValue("googleCheckout.properties", "merchant.checkout.command", "merchantCheckout");
- String checkoutCommand = UtilProperties.getPropertyValue("googleCheckout.properties", "checkout.command", "checkout");
- String requestCommand = UtilProperties.getPropertyValue("googleCheckout.properties", "request.command", "request");
+ String merchantCheckoutCommand = UtilProperties.getPropertyValue("google-checkout.properties", "merchant.checkout.command", "merchantCheckout");
+ String checkoutCommand = UtilProperties.getPropertyValue("google-checkout.properties", "checkout.command", "checkout");
+ String requestCommand = UtilProperties.getPropertyValue("google-checkout.properties", "request.command", "request");
+ String environment = null;
String checkoutUrl = "";
String merchantCheckoutUrl = "";
String requestUrl = "";
// build the URLs based on the Environment type
- if (EnvironmentType.Sandbox.equals(environment)) {
+ if ("GOOGLE_SANDBOX".equals(envEnumId)) {
merchantCheckoutUrl = sandboxRoot + "/" + merchantCheckoutCommand + "/Merchant/" + merchantId;
checkoutUrl = sandboxRoot + "/" + checkoutCommand + "/Merchant/" + merchantId;
requestUrl = sandboxRoot + "/" + requestCommand + "/Merchant/" + merchantId;
- } else if (EnvironmentType.Production.equals(environment)) {
+ environment = EnvironmentType.Sandbox;
+ } else if ("GOOGLE_PRODUCTION".equals(envEnumId)) {
merchantCheckoutUrl = productionRoot + "/" + merchantCheckoutCommand + "/Merchant/" + merchantId;
checkoutUrl = productionRoot + "/" + checkoutCommand + "/Merchant/" + merchantId;
requestUrl = productionRoot + "/" + requestCommand + "/Merchant/" + merchantId;
+ environment = EnvironmentType.Production;
} else {
Debug.logError("Environment must be one of " + EnvironmentType.Sandbox + " or " + EnvironmentType.Production + ".", module);
return null;