You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ap...@apache.org on 2007/07/26 01:23:05 UTC
svn commit: r559646 -
/ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java
Author: apatel
Date: Wed Jul 25 16:23:03 2007
New Revision: 559646
URL: http://svn.apache.org/viewvc?view=rev&rev=559646
Log:
first pass of create/ bare minimum PO if incoming message is for receipt of PO that doesn't exist.
Modified:
ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.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?view=diff&rev=559646&r1=559645&r2=559646
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java (original)
+++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java Wed Jul 25 16:23:03 2007
@@ -40,6 +40,7 @@
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilDateTime;
+import org.ofbiz.base.util.UtilFormatOut;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.base.util.UtilValidate;
@@ -353,10 +354,8 @@
Element dataAreaElement = UtilXml.firstChildElement(receivePoElement, "n:DATAAREA");
Element acknowledgeDeliveryElement = UtilXml.firstChildElement(dataAreaElement, "n:ACKNOWLEDGE_DELIVERY");
- String inventoryItemTypeId = null;
- String orderId = null;
String facilityId = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Warehouse.PoReceiptFacilityId");
-
+ String productId = null;
// get RECEIPTLN elements from message
List acknowledgeElementList = UtilXml.childElementList(acknowledgeDeliveryElement, "n:RECEIPTLN");
if (UtilValidate.isNotEmpty(acknowledgeElementList)) {
@@ -370,66 +369,67 @@
double itemQty = Double.parseDouble(itemQtyStr);
String sign = UtilXml.childElementValue(qtyElement, "of:SIGN");
- String productId = UtilXml.childElementValue(receiptLnElement, "of:ITEM");
+ productId = UtilXml.childElementValue(receiptLnElement, "of:ITEM");
Element documentRefElement = UtilXml.firstChildElement(receiptLnElement, "os:DOCUMNTREF");
- orderId = UtilXml.childElementValue(documentRefElement, "of:DOCUMENTID");
- String orderItemSeqId = UtilXml.childElementValue(documentRefElement, "of:LINENUM");
+ String orderId = UtilXml.childElementValue(documentRefElement, "of:DOCUMENTID");
+ String orderTypeId = UtilXml.childElementValue(documentRefElement, "of:DOCTYPE");
+ if(orderTypeId.equals("PO")) {
+ orderTypeId = "PURCHASE_ORDER";
+ }
- // check reference to PO number, if exists
- GenericValue orderHeader = null;
+ String datetimeReceived = UtilXml.childElementValue(receiptLnElement, "os:DATETIMEISO");
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'Z");
+ Timestamp timestamp = null;
try {
- orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId));
- if (orderHeader != null) {
- ripCtx.put("orderId", orderId);
- ripCtx.put("orderItemSeqId", orderItemSeqId);
- comiCtx.put("orderId", orderId);
- }
- } catch (GenericEntityException e) {
- String errMsg = "Error Getting OrderHeader: " + e.toString();
- errorMapList.add(UtilMisc.toMap("reasonCode", "GenericEntityException", "description", errMsg));
+ timestamp = new Timestamp( sdf.parse(datetimeReceived ).getTime() );
+ ripCtx.put("datetimeReceived", timestamp);
+ } catch (ParseException e) {
+ String errMsg = "Error parsing Date: " + e.toString();
+ errorMapList.add(UtilMisc.toMap("reasonCode", "ParseException", "description", errMsg));
Debug.logError(e, errMsg, module);
}
- // get inventory item status
- String invItemStatus = UtilXml.childElementValue(receiptLnElement, "of:DISPOSITN");
- if ( invItemStatus.equals("ReceivedTOAvailable") || invItemStatus.equals("NotAvailableTOAvailable")) {
- ripCtx.put("statusId", "INV_AVAILABLE");
- } else if ( invItemStatus.equals("ReceivedTONotAvailable") || invItemStatus.equals("AvailableTONotAvailable") ) {
- ripCtx.put("statusId", "INV_ON_HOLD");
- }
- // get the serial number(s)
- List serialNumsList = FastList.newInstance();
- List invDetailList = UtilXml.childElementList(receiptLnElement, "n:INVDETAIL");
- if (UtilValidate.isNotEmpty(invDetailList)) {
- inventoryItemTypeId = "SERIALIZED_INV_ITEM";
- ripCtx.put("inventoryItemTypeId", inventoryItemTypeId);
- for (Iterator j = invDetailList.iterator(); j.hasNext();) {
- Element invDetailElement = (Element) j.next();
- String serialNumber = UtilXml.childElementValue(invDetailElement, "of:SERIALNUM");
- if (UtilValidate.isNotEmpty(serialNumber)) {
- serialNumsList.add(serialNumber);
- }
- }
- /* DEJ20070711 Commenting this out because it shouldn't happen, ie more likely the ITEM element will be filled
- * than INVDETAIL->SERIALNUM, and this isn't a reliable way to look it up (may be more than 1 record for a given
- * serialNumber for different products
- // this is a Serialized Inventory Item. If the productId from the message is not valid then lets read it from InventoryItem in Ofbiz database.
- if (productId == null || "".equals(productId)) {
- try {
- GenericValue inventoryItem = EntityUtil.getFirst(delegator.findByAnd("InventoryItem", UtilMisc.toMap("serialNumber", serialNumber)));
- if (inventoryItem !=null) {
- productId = inventoryItem.getString("productId");
- }
- } catch (GenericEntityException e){
- String errMsg = "Error Getting Entity InventoryItem";
- Debug.logError(e, errMsg, module);
+ // Check reference to PO number, if exists
+ GenericValue orderHeader = null;
+ if(orderId != null) {
+ try {
+ List toStore = FastList.newInstance();
+ orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId));
+ if (orderHeader != null) {
+ // Case : update the record
+ ripCtx.put("orderId", orderId);
+ comiCtx.put("orderId", orderId);
+ GenericValue orderItem = delegator.makeValue("OrderItem", UtilMisc.toMap("orderId", orderId, "productId",productId,"quantity",new Double(itemQtyStr)));
+ delegator.setNextSubSeqId(orderItem,"orderItemSeqId", 5, 1);
+ delegator.create(orderItem);
+ ripCtx.put("orderItemSeqId", orderItem.get("orderItemSeqId"));
+ } else {
+ // Case : New record entry when PO not exists in the Database
+ orderHeader = delegator.makeValue("OrderHeader", UtilMisc.toMap("orderId", orderId, "orderTypeId",orderTypeId ,
+ "orderDate", timestamp, "statusId", "ORDER_CREATED", "entryDate", UtilDateTime.nowTimestamp(),
+ "productStoreId", UtilProperties.getPropertyValue("oagis.properties", "Oagis.Warehouse.SyncInventoryProductStoreId","9001")));
+ toStore.add(orderHeader);
+ GenericValue orderItem = delegator.makeValue("OrderItem", UtilMisc.toMap("orderId", orderId ,
+ "orderItemSeqId", UtilFormatOut.formatPaddedNumber(1L, 5) ,
+ "productId",productId ,"quantity",new Double(itemQtyStr) ));
+ toStore.add(orderItem);
+ delegator.storeAll(toStore);
}
- } */
- } else {
- inventoryItemTypeId = "NON_SERIAL_INV_ITEM";
- ripCtx.put("inventoryItemTypeId", inventoryItemTypeId);
+ } catch (GenericEntityException e) {
+ String errMsg = "Error Getting OrderHeader: " + e.toString();
+ errorMapList.add(UtilMisc.toMap("reasonCode", "GenericEntityException", "description", errMsg));
+ Debug.logError(e, errMsg, module);
+ }
+ }
+ // get inventory item status
+ String invItemStatus = UtilXml.childElementValue(receiptLnElement, "of:DISPOSITN");
+ if (invItemStatus.equals("ReceivedTOAvailable") || invItemStatus.equals("NotAvailableTOAvailable")) {
+ ripCtx.put("statusId","INV_AVAILABLE");
+ } else if (invItemStatus.equals("ReceivedTONotAvailable") || invItemStatus.equals("AvailableTONotAvailable") ) {
+ ripCtx.put("statusId","INV_ON_HOLD");
}
+ ripCtx.put("inventoryItemTypeId", "NON_SERIAL_INV_ITEM");
ripCtx.put("productId", productId);
ripCtx.put("facilityId",facilityId);
ripCtx.put("userLogin", userLogin);
@@ -444,69 +444,21 @@
quantityRejected = itemQty;
quantityAccepted = 0.0;
}
- if (quantityAccepted > 0) {
- if (serialNumsList.size() > 0) {
- if (serialNumsList.size() != quantityAccepted) {
- // this is an error, do something about it, like add to the list to send back a Confirm BOD with error messages
- String errMsg = "Error: the quantity [" + quantityAccepted + "] did not match the number of serial numbers passed [" + serialNumsList.size() + "].";
- errorMapList.add(UtilMisc.toMap("reasonCode", "QuantitySerialMismatch", "description", errMsg));
- }
-
- Iterator serialNumIter = serialNumsList.iterator();
- while (serialNumIter.hasNext()) {
- String serialNum = (String) serialNumIter.next();
-
- // 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);
-
- try {
- Map ripResult = dispatcher.runSync("receiveInventoryProduct", localRipCtx);
- if (ServiceUtil.isError(ripResult)) {
- String errMsg = ServiceUtil.getErrorMessage(ripResult);
- errorMapList.add(UtilMisc.toMap("reasonCode", "ReceiveInventoryServiceError", "description", errMsg));
- }
- } catch (GenericServiceException e) {
- String errMsg = "Error running service receiveInventoryProduct: " + e.toString();
- errorMapList.add(UtilMisc.toMap("reasonCode", "GenericServiceException", "description", errMsg));
- Debug.logError(e, errMsg, module);
- }
- }
- } else {
- // no serial numbers, just receive the quantity
-
- // clone the context as it may be changted in the call
- Map localRipCtx = FastMap.newInstance();
- localRipCtx.putAll(ripCtx);
-
- localRipCtx.put("quantityAccepted", new Double(quantityAccepted));
- // always set this to 0, if needed we'll handle the rejected quantity separately
- localRipCtx.put("quantityRejected", new Double(0.0));
-
- try {
- Map ripResult = dispatcher.runSync("receiveInventoryProduct", localRipCtx);
- if (ServiceUtil.isError(ripResult)) {
- String errMsg = ServiceUtil.getErrorMessage(ripResult);
- errorMapList.add(UtilMisc.toMap("reasonCode", "ReceiveInventoryServiceError", "description", errMsg));
- }
- } catch (GenericServiceException e) {
- String errMsg = "Error running service receiveInventoryProduct: " + e.toString();
- errorMapList.add(UtilMisc.toMap("reasonCode", "GenericServiceException", "description", errMsg));
- Debug.logError(e, errMsg, module);
- }
- }
- } else {
- // TODOLATER: need to run service receiveInventoryProduct and updateInventoryItem when quantityRejected > 0
- // NOTE DEJ20070711 this shouldn't happen for current needs, so save for later
- }
+ ripCtx.put("quantityAccepted", new Double(quantityAccepted));
+ ripCtx.put("quantityRejected", new Double(quantityRejected));
+ try {
+ Map ripResult = dispatcher.runSync("receiveInventoryProduct", ripCtx);
+ if (ServiceUtil.isError(ripResult)) {
+ String errMsg = ServiceUtil.getErrorMessage(ripResult);
+ errorMapList.add(UtilMisc.toMap("reasonCode", "ReceiveInventoryServiceError", "description", errMsg));
+ }
+ } catch (GenericServiceException e) {
+ String errMsg = "Error running service receiveInventoryProduct: " + e.toString();
+ errorMapList.add(UtilMisc.toMap("reasonCode", "GenericServiceException", "description", errMsg));
+ Debug.logError(e, errMsg, module);
+ }
}
- }
+ }
//prepare result Map for createOagisMessageinfo
Timestamp timestamp = null;
@@ -656,6 +608,9 @@
inventoryItemTypeId = "NON_SERIAL_INV_ITEM";
ripCtx.put("inventoryItemTypeId", inventoryItemTypeId);
}
+ inventoryItemTypeId = "NON_SERIAL_INV_ITEM";
+ ripCtx.put("inventoryItemTypeId", inventoryItemTypeId);
+
ripCtx.put("productId", productId);
ripCtx.put("facilityId",facilityId);
ripCtx.put("locationSeqId", locationSeqId);
@@ -678,7 +633,7 @@
String errMsg = "Error: the quantity [" + quantityAccepted + "] did not match the number of serial numbers passed [" + serialNumsList.size() + "].";
errorMapList.add(UtilMisc.toMap("reasonCode", "QuantitySerialMismatch", "description", errMsg));
}
-
+
Iterator serialNumIter = serialNumsList.iterator();
while (serialNumIter.hasNext()) {
String serialNum = (String) serialNumIter.next();