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();