Author: jonesde
Date: Wed Aug 22 21:07:59 2007 New Revision: 568817 URL: http://svn.apache.org/viewvc?rev=568817&view=rev Log: Finished round trip test for fulfillment, return and notice of refurbishment complete for serialized inventory; this included a number of bug fixes, and fleshing out functionality in receiveInventoryProduct to handle InventoryItem updates, and of course changes to use that instead of just updating the InventoryItem and leaving out the ShipmentReceipt, ReturnItem, etc changes necessary; note that to see if return is totally received now looks at ShipmentReceipt records instead of InventoryItemDetail so it will work with serialized and non-serialized inventory Modified: ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java 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?rev=568817&r1=568816&r2=568817&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java (original) +++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java Wed Aug 22 21:07:59 2007 @@ -857,37 +857,27 @@ // TODOLATER: another fun thing to check: see if the serial number matches a serial number attached to the original return (if possible!) + //clone the context as it may be changed in the call + Map localRipCtx = FastMap.newInstance(); + localRipCtx.putAll(ripCtx); + localRipCtx.put("quantityAccepted", new Double(1.0)); + // always set this to 0, if needed we'll handle the rejected quantity separately + localRipCtx.put("quantityRejected", new Double(0.0)); + localRipCtx.put("serialNumber", serialNum); + localRipCtx.put("productId", productId); + localRipCtx.put("returnItemSeqId", returnItemSeqId); + GenericValue inventoryItem = EntityUtil.getFirst(inventoryItemsBySerialNumber); if (inventoryItem != null) { - Map updateInvItmMap = FastMap.newInstance(); - updateInvItmMap.put("inventoryItemId", inventoryItem.getString("inventoryItemId")); - updateInvItmMap.put("userLogin", userLogin); - updateInvItmMap.put("statusId", invItemStatusId); - String inventoryItemProductId = inventoryItem.getString("productId"); - if (!inventoryItemProductId.equals(productId)) { - // got a new productId for the serial number; this may happen for refurbishment, etc - updateInvItmMap.put("productId",productId); - } - dispatcher.runSync("updateInventoryItem", updateInvItmMap); - invItemIds.add(UtilMisc.toMap("inventoryItemId", inventoryItem.getString("inventoryItemId"))); - } else { - //clone the context as it may be changed in the call - Map localRipCtx = FastMap.newInstance(); - localRipCtx.putAll(ripCtx); - localRipCtx.put("quantityAccepted", new Double(1.0)); - // always set this to 0, if needed we'll handle the rejected quantity separately - localRipCtx.put("quantityRejected", new Double(0.0)); - localRipCtx.put("serialNumber", serialNum); - localRipCtx.put("productId", productId); - localRipCtx.put("returnItemSeqId", returnItemSeqId); - - Map ripResult = dispatcher.runSync("receiveInventoryProduct", localRipCtx); - if (ServiceUtil.isError(ripResult)) { - String errMsg = ServiceUtil.getErrorMessage(ripResult); - errorMapList.add(UtilMisc.toMap("reasonCode", "ReceiveInventoryServiceError", "description", errMsg)); - } - invItemIds.add(ripResult.get("inventoryItemId")); + localRipCtx.put("inventoryItemId", inventoryItem.getString("inventoryItemId")); } + + Map ripResult = dispatcher.runSync("receiveInventoryProduct", localRipCtx); + if (ServiceUtil.isError(ripResult)) { + String errMsg = ServiceUtil.getErrorMessage(ripResult); + errorMapList.add(UtilMisc.toMap("reasonCode", "ReceiveInventoryServiceError", "description", errMsg)); + } + invItemIds.add(ripResult.get("inventoryItemId")); } } else { String inventoryItemTypeId = "NON_SERIAL_INV_ITEM"; @@ -982,25 +972,26 @@ String productId = (String) returnQuantityByProductIdEntry.getKey(); double returnQuantity = ((Double) returnQuantityByProductIdEntry.getValue()).doubleValue(); - double inventoryQuantity = 0; + double receivedQuantity = 0; // note no facilityId because we don't really care where the return items were received - List inventoryItemDetailList = delegator.findByAnd("InventoryItemAndDetail", UtilMisc.toMap("productId", productId, "returnId", returnId)); + List shipmentReceiptList = delegator.findByAnd("ShipmentReceipt", UtilMisc.toMap("productId", productId, "returnId", returnId)); // NOTE only consider those with a quantityOnHandDiff > 0 so we just look at how many have been received, not what was actually done with them - Iterator inventoryItemDetailIter = inventoryItemDetailList.iterator(); - while (inventoryItemDetailIter.hasNext()) { - GenericValue inventoryItemDetail = (GenericValue) inventoryItemDetailIter.next(); - Double quantityOnHandDiff = inventoryItemDetail.getDouble("quantityOnHandDiff"); - if (quantityOnHandDiff != null && quantityOnHandDiff.doubleValue() > 0) { - inventoryQuantity += quantityOnHandDiff.doubleValue(); + Iterator shipmentReceiptIter = shipmentReceiptList.iterator(); + while (shipmentReceiptIter.hasNext()) { + GenericValue shipmentReceipt = (GenericValue) shipmentReceiptIter.next(); + Double quantityAccepted = shipmentReceipt.getDouble("quantityAccepted"); + if (quantityAccepted != null && quantityAccepted.doubleValue() > 0) { + receivedQuantity += quantityAccepted.doubleValue(); } } - if (inventoryQuantity < returnQuantity) { + if (receivedQuantity < returnQuantity) { fullReturnReceived = false; break; - } else if (inventoryQuantity > returnQuantity) { + } else if (receivedQuantity > returnQuantity) { // TODOLATER: we received MORE than expected... what to do about that?!? - String warnMsg = "Received more [" + inventoryQuantity + "] than were expected on return [" + returnQuantity + "] for Return ID [" + returnId + "] and Product ID [" + productId + "]"; + String warnMsg = "Received more [" + receivedQuantity + "] than were expected on return [" + returnQuantity + "] for Return ID [" + returnId + "] and Product ID [" + productId + "]"; + warnMsg = warnMsg + "; still completing return, but something should be done with these extras!"; Debug.logWarning(warnMsg, module); // even with that, allow it to go through and complete the return } 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?rev=568817&r1=568816&r2=568817&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java (original) +++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java Wed Aug 22 21:07:59 2007 @@ -352,14 +352,14 @@ EntityOperator.AND, new EntityExpr("productId", EntityOperator.IN, productIdSet)); List inventoryItemsBySerialNumber = delegator.findByCondition("InventoryItem", bySerialNumberCondition, null, null); if (OagisServices.requireSerialNumberExist.booleanValue()) { - if (inventoryItemsBySerialNumber.size() > 0) { - String errMsg = "Referenced serial numbers must already exist, but serial number [" + serialNumber + "] was not found."; + if (inventoryItemsBySerialNumber.size() == 0) { + String errMsg = "Referenced serial numbers must already exist, but serial number [" + serialNumber + "] was not found. Product ID(s) considered are: " + productIdSet; errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "SerialNumberRequiredButNotFound")); continue; } } else { - if (inventoryItemsBySerialNumber.size() == 0) { - String errMsg = "Referenced serial numbers must NOT already exist, but serial number [" + serialNumber + "] already exists."; + if (inventoryItemsBySerialNumber.size() > 0) { + String errMsg = "Referenced serial numbers must NOT already exist, but serial number [" + serialNumber + "] already exists. Product ID(s) considered are: " + productIdSet; errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "SerialNumberRequiredNotExistButFound")); continue; } |
Free forum by Nabble | Edit this page |