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/08/08 03:03:00 UTC
svn commit: r563713 -
/ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java
Author: jonesde
Date: Tue Aug 7 18:03:00 2007
New Revision: 563713
URL: http://svn.apache.org/viewvc?view=rev&rev=563713
Log:
Changed show shipment to handle multiple inventory reservation records for a given item and to actually use the quantity passed in the message (which was being ignored), also some refactoring and more validation checks and improved (hopefully) error handling
Modified:
ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java
Modified: ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java?view=diff&rev=563713&r1=563712&r2=563713
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java (original)
+++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java Tue Aug 7 18:03:00 2007
@@ -224,8 +224,14 @@
Iterator invItemElementItr = invItemElementList.iterator();
while(invItemElementItr.hasNext()) {
Element invItemElement = (Element) invItemElementItr.next();
- String productId = UtilXml.childElementValue(invItemElement, "of:ITEM"); // of
- try {
+ String productId = UtilXml.childElementValue(invItemElement, "of:ITEM"); // of
+
+ try {
+ Element quantityElement = UtilXml.firstChildElement(invItemElement, "os:QUANTITY"); // os
+ String quantityValueStr = UtilXml.childElementValue(quantityElement, "of:VALUE"); // os
+ // TODO: <of:NUMOFDEC>0</of:NUMOFDEC> should always be 0, but might want to add code to check
+ Integer messageQuantity = Integer.valueOf(quantityValueStr);
+
GenericValue shipmentItem = EntityUtil.getFirst(delegator.findByAnd("ShipmentItem", UtilMisc.toMap("shipmentId", shipmentId, "productId",productId)));
String shipmentItemSeqId = shipmentItem.getString("shipmentItemSeqId");
GenericValue orderShipment = EntityUtil.getFirst(delegator.findByAnd("OrderShipment", UtilMisc.toMap("shipmentId", shipmentId, "shipmentItemSeqId", shipmentItemSeqId)));
@@ -233,34 +239,99 @@
String orderItemSeqId = orderShipment.getString("orderItemSeqId");
GenericValue product = delegator.findByPrimaryKey("Product",UtilMisc.toMap("productId",productId));
String requireInventory = product.getString("requireInventory");
- if(requireInventory == null) {
+ if (requireInventory == null) {
requireInventory = "N";
- }
- GenericValue orderItemShipGrpInvReservation = EntityUtil.getFirst(delegator.findByAnd("OrderItemShipGrpInvRes", UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItemSeqId,"shipGroupSeqId",shipGroupSeqId)));
- Map isitspastCtx = UtilMisc.toMap("orderId", orderId, "shipGroupSeqId", shipGroupSeqId, "orderItemSeqId", orderItemSeqId);
- isitspastCtx.put("productId", productId);
- isitspastCtx.put("reservedDatetime", orderItemShipGrpInvReservation.get("reservedDatetime"));
- isitspastCtx.put("requireInventory", requireInventory);
- isitspastCtx.put("reserveOrderEnumId", orderItemShipGrpInvReservation.get("reserveOrderEnumId"));
- isitspastCtx.put("sequenceId", orderItemShipGrpInvReservation.get("sequenceId"));
- isitspastCtx.put("originFacilityId", originFacilityId);
- isitspastCtx.put("userLogin", userLogin);
- isitspastCtx.put("trackingNum", trackingNum);
- isitspastCtx.put("inventoryItemId", orderItemShipGrpInvReservation.get("inventoryItemId"));
- isitspastCtx.put("shipmentId", shipmentId);
- isitspastCtx.put("shipmentPackageSeqId", shipmentPackageSeqId);
- isitspastCtx.put("promisedDatetime", orderItemShipGrpInvReservation.get("promisedDatetime"));
- List invDetailElementList = UtilXml.childElementList(invItemElement, "ns:INVDETAIL"); //n
- if(UtilValidate.isNotEmpty(invDetailElementList)) {
- Iterator invDetailElementItr = invDetailElementList.iterator();
- while(invDetailElementItr.hasNext()) {
- Element invDetailElement = (Element) invDetailElementItr.next();
- String serialNumber = UtilXml.childElementValue(invDetailElement, "of:SERIALNUM"); // os
- isitspastCtx.put("serialNumber", serialNumber);
- isitspastCtx.put("quantity", new Double (1));
- isitspastCtx.put("inventoryItemId", orderItemShipGrpInvReservation.get("inventoryItemId"));
- isitspastCtx.remove("itemIssuanceId");
+ }
+
+ // TODO and NOTE: could there be more than one reservation record for a given shipment item? for example if there wasn't enough quantity in one inventory item and reservations on two were needed? yes
+ List orderItemShipGrpInvReservationList = delegator.findByAnd("OrderItemShipGrpInvRes", UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItemSeqId,"shipGroupSeqId",shipGroupSeqId));
+
+ // find the total quantity for all reservations
+ int totalReserved = 0;
+ Iterator orderItemShipGrpInvReservationCountIter = orderItemShipGrpInvReservationList.iterator();
+ while (orderItemShipGrpInvReservationCountIter.hasNext()) {
+ GenericValue orderItemShipGrpInvReservation = (GenericValue) orderItemShipGrpInvReservationCountIter.next();
+ if (orderItemShipGrpInvReservation.getDouble("quantity") != null) {
+ totalReserved += orderItemShipGrpInvReservation.getDouble("quantity").doubleValue();
+ }
+ }
+
+ List serialNumberList = FastList.newInstance();
+ List invDetailElementList = UtilXml.childElementList(invItemElement, "ns:INVDETAIL"); //n
+ Iterator invDetailElementItr = invDetailElementList.iterator();
+ while(invDetailElementItr.hasNext()) {
+ Element invDetailElement = (Element) invDetailElementItr.next();
+ String serialNumber = UtilXml.childElementValue(invDetailElement, "of:SERIALNUM"); // os
+ if (UtilValidate.isNotEmpty(serialNumber)) {
+ serialNumberList.add(serialNumber);
+ }
+ }
+
+ // do some validations
+ boolean continueLoop = false;
+ if(UtilValidate.isNotEmpty(serialNumberList)) {
+ if (messageQuantity.intValue() != serialNumberList.size()) {
+ String errMsg = "Not enough serial numbers [" + serialNumberList.size() + "] for the quantity [" + messageQuantity.intValue() + "].";
+ errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "SerialNumbersMissing"));
+ Debug.logInfo(errMsg, module);
+ continueLoop = true;
+ }
+ }
+ if ((int) totalReserved != messageQuantity.intValue()) {
+ String errMsg = "Not enough serial numbers [" + serialNumberList.size() + "] for the quantity [" + messageQuantity.intValue() + "].";
+ errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "SerialNumbersMissing"));
+ Debug.logInfo(errMsg, module);
+ continueLoop = true;
+ }
+
+ if (continueLoop) {
+ continue;
+ }
+
+ Iterator serialNumberIter = serialNumberList.iterator();
+ Iterator orderItemShipGrpInvReservationIter = orderItemShipGrpInvReservationList.iterator();
+ while (orderItemShipGrpInvReservationIter.hasNext()) {
+ GenericValue orderItemShipGrpInvReservation = (GenericValue) orderItemShipGrpInvReservationIter.next();
+ int currentResQuantity = orderItemShipGrpInvReservation.getDouble("quantity").intValue();
+
+ Map isitspastCtx = UtilMisc.toMap("orderId", orderId, "shipGroupSeqId", shipGroupSeqId, "orderItemSeqId", orderItemSeqId);
+ isitspastCtx.put("productId", productId);
+ isitspastCtx.put("reservedDatetime", orderItemShipGrpInvReservation.get("reservedDatetime"));
+ isitspastCtx.put("requireInventory", requireInventory);
+ isitspastCtx.put("reserveOrderEnumId", orderItemShipGrpInvReservation.get("reserveOrderEnumId"));
+ isitspastCtx.put("sequenceId", orderItemShipGrpInvReservation.get("sequenceId"));
+ isitspastCtx.put("originFacilityId", originFacilityId);
+ isitspastCtx.put("userLogin", userLogin);
+ isitspastCtx.put("trackingNum", trackingNum);
+ isitspastCtx.put("inventoryItemId", orderItemShipGrpInvReservation.get("inventoryItemId"));
+ isitspastCtx.put("shipmentId", shipmentId);
+ isitspastCtx.put("shipmentPackageSeqId", shipmentPackageSeqId);
+ isitspastCtx.put("promisedDatetime", orderItemShipGrpInvReservation.get("promisedDatetime"));
+
+ if(UtilValidate.isNotEmpty(serialNumberList)) {
+ for (int i = 0; i < currentResQuantity; i++) {
+ String serialNumber = (String) serialNumberIter.next();
+ isitspastCtx.put("serialNumber", serialNumber);
+ isitspastCtx.put("quantity", new Double (1));
+ isitspastCtx.put("inventoryItemId", orderItemShipGrpInvReservation.get("inventoryItemId"));
+ isitspastCtx.remove("itemIssuanceId");
+ try {
+ Map resultMap = dispatcher.runSync("issueSerializedInvToShipmentPackageAndSetTracking", isitspastCtx);
+ if (ServiceUtil.isError(resultMap)){
+ String errMsg = ServiceUtil.getErrorMessage(resultMap);
+ errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "IssueSerializedInvServiceError"));
+ Debug.logError(errMsg, module);
+ }
+ } catch(GenericServiceException e) {
+ Debug.logInfo(e, module);
+ String errMsg = "Error executing issueSerializedInvToShipmentPackageAndSetTracking Service: "+e.toString();
+ errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
+ }
+ }
+ } else {
try {
+ //TODO: I think this else part is for NON Serialized Inv item. So it will be different service that we need to call here.
+ isitspastCtx.put("quantity", new Double(currentResQuantity));
Map resultMap = dispatcher.runSync("issueSerializedInvToShipmentPackageAndSetTracking", isitspastCtx);
if (ServiceUtil.isError(resultMap)){
String errMsg = ServiceUtil.getErrorMessage(resultMap);
@@ -271,27 +342,18 @@
Debug.logInfo(e, module);
String errMsg = "Error executing issueSerializedInvToShipmentPackageAndSetTracking Service: "+e.toString();
errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
- }
+ }
}
- } else {
- try {//TODO: I think this else part is for NON Serialized Inv item. So it will be different service that we need to call here.
- isitspastCtx.put("quantity", orderItemShipGrpInvReservation.get("quantity"));
- Map resultMap = dispatcher.runSync("issueSerializedInvToShipmentPackageAndSetTracking", isitspastCtx);
- if (ServiceUtil.isError(resultMap)){
- String errMsg = ServiceUtil.getErrorMessage(resultMap);
- errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "IssueSerializedInvServiceError"));
- Debug.logError(errMsg, module);
- }
- } catch(GenericServiceException e) {
- Debug.logInfo(e, module);
- String errMsg = "Error executing issueSerializedInvToShipmentPackageAndSetTracking Service: "+e.toString();
- errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
- }
}
+
+ } catch (NumberFormatException e) {
+ String errMsg = "Error in format for number: " + e.toString();
+ errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "NumberFormatException"));
+ Debug.logInfo(e, errMsg, module);
} catch (GenericEntityException e) {
- String errMsg = "Error executing issueSerializedInvToShipmentPackageAndSetTracking Service: "+e.toString();
+ String errMsg = "Error executing issueSerializedInvToShipmentPackageAndSetTracking Service: " + e.toString();
errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericEntityException"));
- Debug.logInfo(e, module);
+ Debug.logInfo(e, errMsg, module);
}
}
}
@@ -305,24 +367,25 @@
}
} catch(GenericServiceException e) {
Debug.logInfo(e, module);
- String errMsg = "Error executing setShipmentStatusPackedAndShipped Service: "+e.toString();
+ String errMsg = "Error executing setShipmentStatusPackedAndShipped Service: " + e.toString();
errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
}
}
- oagisMsgInfoCtx.put("processingStatusId", "OAGMP_RECEIVED");
- try {
- dispatcher.runSync("updateOagisMessageInfo", oagisMsgInfoCtx, 60, true);
- } catch (GenericServiceException e){
- String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
- // don't pass this back, nothing they can do about it: errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
- Debug.logError(e, errMsg, module);
- }
-
if (errorMapList.size() > 0) {
- //result.putAll(ServiceUtil.returnError("Errors found processing message"));
+ // DEJ20070807 what was this next line commented out? if there are errors we want to return an error so this will roll back
+ result.putAll(ServiceUtil.returnError("Errors found processing message"));
result.put("errorMapList", errorMapList);
return result;
+ } else {
+ oagisMsgInfoCtx.put("processingStatusId", "OAGMP_PROC_SUCCESS");
+ try {
+ dispatcher.runSync("updateOagisMessageInfo", oagisMsgInfoCtx, 60, true);
+ } catch (GenericServiceException e){
+ String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+ // don't pass this back, nothing they can do about it: errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
+ Debug.logError(e, errMsg, module);
+ }
}
result.putAll(ServiceUtil.returnSuccess("Service Completed Successfully"));