From: Chris L. <cli...@ea...> - 2007-10-22 21:12:33
|
Author: cliberty Date: 2007-10-22 14:12:37 -0700 (Mon, 22 Oct 2007) New Revision: 5738 Modified: versions/1.0/trunk/hot-deploy/amazon/src/org/opentaps/amazon/AmazonUtil.java versions/1.0/trunk/hot-deploy/amazon/src/org/opentaps/amazon/sync/AmazonBatchServices.java Log: Amazon: Update batch product service to watch for salesDiscontinuationDate, and adding a util method to create the initial set of Amazon product-related records (which won't really be publishable without adding some Amazon-specific data first) Modified: versions/1.0/trunk/hot-deploy/amazon/src/org/opentaps/amazon/AmazonUtil.java =================================================================== --- versions/1.0/trunk/hot-deploy/amazon/src/org/opentaps/amazon/AmazonUtil.java 2007-10-22 21:06:38 UTC (rev 5737) +++ versions/1.0/trunk/hot-deploy/amazon/src/org/opentaps/amazon/AmazonUtil.java 2007-10-22 21:12:37 UTC (rev 5738) @@ -16,9 +16,13 @@ package org.opentaps.amazon; +import java.sql.Timestamp; +import java.util.*; + import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilDateTime; import org.ofbiz.base.util.UtilMisc; +import org.ofbiz.entity.GenericDelegator; import org.ofbiz.entity.GenericValue; import org.ofbiz.service.GenericServiceException; import org.ofbiz.service.LocalDispatcher; @@ -27,8 +31,6 @@ import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; -import java.sql.Timestamp; -import java.util.*; /** * Utilities for Amazon integration @@ -183,6 +185,17 @@ } /** + * Marks an AmazonProduct as deleted, which will cause it to be deleted from Amazon. + * + * @param GenericValue value + */ + public static void markAmazonProductAsDeleted(GenericValue value) { + markAmazonValueAsUpdated(value); + value.set("statusId", AmazonConstants.statusProductDeleted); + value.set("ackStatusId", AmazonConstants.statusProductNotAcked); + } + + /** * Marks an AmazonProductImage as updated, which will cause it to be published to Amazon. * * @param GenericValue value @@ -206,6 +219,28 @@ value.set("ackStatusId", AmazonConstants.statusProductNotAcked); } + /** + * Creates the necessary set of records for a new Amazon product + * + * @param delegator + * @param productId + * @return + */ + public static List createAmazonProductRecords(GenericDelegator delegator, String productId) { + GenericValue amazonProduct = delegator.makeValue("AmazonProduct", UtilMisc.toMap("productId", productId)); + markAmazonValueAsUpdated(amazonProduct); + amazonProduct.set("statusId", AmazonConstants.statusProductCreated); + amazonProduct.set("ackStatusId", AmazonConstants.statusProductNotAcked); + GenericValue amazonProductPrice = delegator.makeValue("AmazonProductPrice", amazonProduct.getAllFields()); + GenericValue amazonProductInventory = delegator.makeValue("AmazonProductInventory", amazonProduct.getAllFields()); + GenericValue amazonProductImage = delegator.makeValue("AmazonProductInventory", UtilMisc.toMap("productId", productId)); + amazonProductImage.set("postTimestamp", null); + amazonProductImage.set("postErrorMessage", null); + amazonProductImage.set("postFailures", new Long(0)); + amazonProductImage.set("processingDocumentId", null); + return UtilMisc.toList(amazonProduct, amazonProductPrice, amazonProductInventory, amazonProductImage); + } + private static void markAmazonValueAsUpdated(GenericValue value) { value.set("postTimestamp", null); value.set("postErrorMessage", null); Modified: versions/1.0/trunk/hot-deploy/amazon/src/org/opentaps/amazon/sync/AmazonBatchServices.java =================================================================== --- versions/1.0/trunk/hot-deploy/amazon/src/org/opentaps/amazon/sync/AmazonBatchServices.java 2007-10-22 21:06:38 UTC (rev 5737) +++ versions/1.0/trunk/hot-deploy/amazon/src/org/opentaps/amazon/sync/AmazonBatchServices.java 2007-10-22 21:12:37 UTC (rev 5738) @@ -52,6 +52,7 @@ public static Map batchUpdateAmazonProducts(DispatchContext dctx, Map context) { GenericDelegator delegator = dctx.getDelegator(); GenericValue userLogin = (GenericValue) context.get("userLogin"); + Timestamp now = UtilDateTime.nowTimestamp(); try { List runs = delegator.findByAnd("AmazonBatchUpdateHistory", UtilMisc.toMap("serviceName", batchUpdateAmazonService), UtilMisc.toList("completedTimestamp DESC")); GenericValue lastRunHistory = EntityUtil.getFirst( runs ); @@ -82,22 +83,25 @@ GenericValue product; while ((product = (GenericValue) iterator.next()) != null) { Timestamp lastModifiedDate = product.getTimestamp("lastModifiedDate"); // if null, assume updated + Timestamp salesDiscontinuationDate = product.getTimestamp("salesDiscontinuationDate"); String productId = product.getString("productId"); boolean imageChanged = false; // we'll update the Amazon model if this is the first time the service runs or if the product has been created/updated since the last run - if (lastRun == null || lastModifiedDate == null || lastModifiedDate.after(lastRun)) { + boolean discontinue = UtilValidate.isNotEmpty(salesDiscontinuationDate) && salesDiscontinuationDate.after(lastRun) && salesDiscontinuationDate.before(now); + if (lastRun == null || lastModifiedDate == null || lastModifiedDate.after(lastRun) || discontinue) { GenericValue amazonProduct = product.getRelatedOne("AmazonProduct"); if (amazonProduct != null) { - AmazonUtil.markAmazonProductAsUpdated(amazonProduct); + if (discontinue) { + AmazonUtil.markAmazonProductAsDeleted(amazonProduct); + } else { + AmazonUtil.markAmazonProductAsUpdated(amazonProduct); + } amazonProduct.store(); } else { // TODO: Evaluate whether this is a good idea or not... companies will each have their own logic which governs whether a product should be posted to Amazon - amazonProduct = delegator.makeValue("AmazonProduct", null); - amazonProduct.set("productId", productId); - amazonProduct.set("statusId", AmazonConstants.statusProductCreated); - amazonProduct.create(); + // delegator.storeAll(AmazonUtil.createAmazonProductRecords(delegator, productId)); } // assume the image has also been updated |