You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jo...@apache.org on 2007/07/25 11:43:07 UTC
svn commit: r559378 - in /ofbiz/trunk/specialpurpose/oagis:
src/org/ofbiz/oagis/OagisInventoryServices.java
templates/email/InventoryNoticeEmail.ftl
Author: jonesde
Date: Wed Jul 25 02:43:06 2007
New Revision: 559378
URL: http://svn.apache.org/viewvc?view=rev&rev=559378
Log:
Some changes for more efficient QOH at a given time queries, plus handling of serialized as well as non-serialized inventory
Modified:
ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java
ofbiz/trunk/specialpurpose/oagis/templates/email/InventoryNoticeEmail.ftl
Modified: ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java?view=diff&rev=559378&r1=559377&r2=559378
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java (original)
+++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java Wed Jul 25 02:43:06 2007
@@ -85,6 +85,8 @@
}
}
+ String facilityId = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Warehouse.SyncInventoryFacilityId");
+
Element syncInventoryRootElement = doc.getDocumentElement();
syncInventoryRootElement.normalize();
Element docCtrlAreaElement = UtilXml.firstChildElement(syncInventoryRootElement, "os:CNTROLAREA");
@@ -125,20 +127,22 @@
//String uom = UtilXml.childElementValue(quantityElement, "of:UOM");
String productId = UtilXml.childElementValue(inventoryElement, "of:ITEM");
String itemStatus = UtilXml.childElementValue(inventoryElement, "of:ITEMSTATUS");
- String statusId = null;
- if (itemStatus.equals("AVAILABLE")) {
- statusId = "INV_AVAILABLE";
- } else if (itemStatus.equals("NOTAVAILABLE")) {
+
+ // if anything but "NOTAVAILABLE" set to available
+ boolean isAvailable = !"NOTAVAILABLE".equals(itemStatus);
+ String statusId = "INV_AVAILABLE";
+ if (!isAvailable) {
statusId = "INV_ON_HOLD";
- }
- String datetimeReceived = UtilXml.childElementValue(inventoryElement, "os:DATETIMEANY");
+ }
+
+ String snapshotDateStr = UtilXml.childElementValue(inventoryElement, "os:DATETIMEISO");
// In BOD the timestamp come in the format "yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'Z"
// Parse this into a valid Timestamp Object
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'Z");
- Timestamp timestamp = null;
+ Timestamp snapshotDate = null;
try {
- timestamp = new Timestamp(sdf.parse(datetimeReceived).getTime());
+ snapshotDate = new Timestamp(sdf.parse(snapshotDateStr).getTime());
} catch (ParseException e) {
String errMsg = "Error parsing Date: " + e.toString();
errorMapList.add(UtilMisc.toMap("reasonCode", "ParseException", "description", errMsg));
@@ -146,30 +150,48 @@
}
// get quantity on hand diff
- double quantityOnHandDiff = 0.0;
- List invItemAndDetails = null;
- EntityCondition condition = new EntityConditionList(UtilMisc.toList(
- new EntityExpr("effectiveDate", EntityOperator.LESS_THAN_EQUAL_TO, timestamp), new EntityExpr("productId", EntityOperator.EQUALS, productId),
- new EntityExpr("statusId", EntityOperator.EQUALS, statusId)), EntityOperator.AND);
- try {
- invItemAndDetails = delegator.findByCondition("InventoryItemAndDetail", condition, null, UtilMisc.toList("inventoryItemId"));
- if (invItemAndDetails != null) {
+ double quantityOnHandTotal = 0.0;
+
+ // only if looking for available inventory find the non-serialized QOH total
+ if (isAvailable) {
+ EntityCondition condition = new EntityConditionList(UtilMisc.toList(
+ new EntityExpr("effectiveDate", EntityOperator.LESS_THAN_EQUAL_TO, snapshotDate),
+ new EntityExpr("productId", EntityOperator.EQUALS, productId),
+ new EntityExpr("facilityId", EntityOperator.EQUALS, facilityId)), EntityOperator.AND);
+ try {
+ List invItemAndDetails = delegator.findByCondition("InventoryItemDetailForSum", condition, UtilMisc.toList("quantityOnHandSum"), null);
Iterator invItemAndDetailIter = invItemAndDetails.iterator();
while (invItemAndDetailIter.hasNext()) {
- GenericValue InventoryItemAndDetail = (GenericValue) invItemAndDetailIter.next();
- quantityOnHandDiff = quantityOnHandDiff + Double.parseDouble(InventoryItemAndDetail.getString("quantityOnHandDiff"));
+ GenericValue inventoryItemDetailForSum = (GenericValue) invItemAndDetailIter.next();
+ quantityOnHandTotal += inventoryItemDetailForSum.getDouble("quantityOnHandSum").doubleValue();
}
+ } catch (GenericEntityException e) {
+ String errMsg = "Error Getting Inventory Item And Detail: " + e.toString();
+ errorMapList.add(UtilMisc.toMap("reasonCode", "GenericEntityException", "description", errMsg));
+ Debug.logError(e, errMsg, module);
}
+ }
+
+ // now regardless of AVAILABLE or NOTAVAILABLE check serialized inventory, just use the corresponding statusId as set above
+ EntityCondition serInvCondition = new EntityConditionList(UtilMisc.toList(
+ new EntityExpr("statusDatetime", EntityOperator.LESS_THAN_EQUAL_TO, snapshotDate),
+ new EntityExpr(new EntityExpr("statusEndDatetime", EntityOperator.GREATER_THAN, snapshotDate), EntityOperator.OR, new EntityExpr("statusEndDatetime", EntityOperator.EQUALS, null)),
+ new EntityExpr("productId", EntityOperator.EQUALS, productId),
+ new EntityExpr("statusId", EntityOperator.EQUALS, statusId),
+ new EntityExpr("facilityId", EntityOperator.EQUALS, facilityId)), EntityOperator.AND);
+ try {
+ long invItemQuantCount = delegator.findCountByCondition("InventoryItemStatusForCount", serInvCondition, null);
+ quantityOnHandTotal += invItemQuantCount;
} catch (GenericEntityException e) {
- String errMsg = "Error Getting Inventory Item And Detail: " + e.toString();
+ String errMsg = "Error Getting Inventory Item by Status Count: " + e.toString();
errorMapList.add(UtilMisc.toMap("reasonCode", "GenericEntityException", "description", errMsg));
Debug.logError(e, errMsg, module);
}
-
+
// check for mismatch in quantity
- if (itemQty != quantityOnHandDiff) {
- double quantityDiff = Math.abs((itemQty - quantityOnHandDiff));
- inventoryMapList.add(UtilMisc.toMap("productId", productId, "statusId", statusId, "quantityOnHandDiff", String.valueOf(quantityOnHandDiff), "quantityFromMessage", itemQtyStr, "quantityDiff", String.valueOf(quantityDiff), "timestamp", timestamp));
+ if (itemQty != quantityOnHandTotal) {
+ double quantityDiff = Math.abs((itemQty - quantityOnHandTotal));
+ inventoryMapList.add(UtilMisc.toMap("productId", productId, "statusId", statusId, "quantityOnHandTotal", String.valueOf(quantityOnHandTotal), "quantityFromMessage", itemQtyStr, "quantityDiff", String.valueOf(quantityDiff), "timestamp", snapshotDate));
}
}
}
@@ -181,7 +203,6 @@
// get facility email address
List facilityContactMechs = null;
GenericValue contactMech = null;
- String facilityId = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Warehouse.SyncInventoryFacilityId");
try {
facilityContactMechs = delegator.findByAnd("FacilityContactMech", UtilMisc.toMap("facilityId", facilityId));
} catch (GenericEntityException e) {
Modified: ofbiz/trunk/specialpurpose/oagis/templates/email/InventoryNoticeEmail.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/templates/email/InventoryNoticeEmail.ftl?view=diff&rev=559378&r1=559377&r2=559378
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/templates/email/InventoryNoticeEmail.ftl (original)
+++ ofbiz/trunk/specialpurpose/oagis/templates/email/InventoryNoticeEmail.ftl Wed Jul 25 02:43:06 2007
@@ -49,7 +49,7 @@
<td align="left" valign="top"> ${inventoryMap.productId?if_exists}</td>
<td align="right" valign="top"> ${inventoryMap.timestamp?if_exists?if_exists}</td>
<td align="right" valign="top"> ${inventoryMap.statusId?if_exists?if_exists}</td>
- <td align="center" valign="top"> ${inventoryMap.quantityOnHandDiff?if_exists?if_exists}</td>
+ <td align="center" valign="top"> ${inventoryMap.quantityOnHandTotal?if_exists?if_exists}</td>
<td align="center" valign="top"> ${inventoryMap.quantityFromMessage?if_exists?if_exists}</td>
<td align="right" valign="top"> ${inventoryMap.quantityDiff?if_exists?if_exists}</td>
</tr>