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; |
Free forum by Nabble | Edit this page |