Author: apatel
Date: Mon Jul 2 18:15:06 2007 New Revision: 552635 URL: http://svn.apache.org/viewvc?view=rev&rev=552635 Log: Minor fixes and clean up in inventory serialized reservation. Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml ofbiz/trunk/applications/product/servicedef/services_facility.xml ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml?view=diff&rev=552635&r1=552634&r2=552635 ============================================================================== --- ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml (original) +++ ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryReserveServices.xml Mon Jul 2 18:15:06 2007 @@ -81,7 +81,7 @@ </else> </if-compare> <set field="orderByList[]" from-field="orderByString"/> - + <set from-field="parameters.quantity" field="parameters.quantityNotReserved"/> <!-- first reserve against InventoryItems in FLT_PICKLOC type locations, then FLT_BULK locations, then InventoryItems with no locations --> @@ -257,31 +257,46 @@ This way I'll get what I want and the other orderItem will also have a similar thing to issue. --> <set field="inventoryItemLookUp.inventoryItemId" from-field="parameters.inventoryItemId"/> - <find-by-primary-key map-name="inventoryItemLookUp" entity-name="InventoryItem" value-name="inventoryItem"/> + <find-by-primary-key map-name="inventoryItemLookUp" entity-name="InventoryItem" value-name="inventoryItem"/> <set field="inventoryReservationLookUp.inventoryItemId" from-field="inventoryItem.inventoryItemId"/> <find-by-and map-name="inventoryReservationLookUp" list-name="invReservations" entity-name="OrderItemShipGrpInvRes"/> <first-from-list entry-name="inventoryItemReservation" list-name="invReservations"/> - <set-service-fields map-name="inventoryItemReservation" to-map-name="cancelOrderItemShipGrpInvResMap" service-name="cancelOrderItemShipGrpInvRes"/> - <set-service-fields map-name="inventoryItemReservation" to-map-name="reReserveOrderItemShipGrpInvResMap" service-name="reserveProductInventory"/> - <!-- We'll get all except productId, facilityId, requireInventory fields in inventoryItemReservation --> + <set-service-fields map-name="inventoryItemReservation" to-map-name="cancelOrderItemShipGrpInvResMap" service-name="cancelOrderItemShipGrpInvRes"/> + <!-- We'll get all except productId, facilityId, requireInventory fields in inventoryItemReservation --> <set field="reReserveOrderItemShipGrpInvResMap.facilityId" from-field="parameters.facilityId"/> <set field="reReserveOrderItemShipGrpInvResMap.productId" from-field="parameters.productId"/> <set field="reReserveOrderItemShipGrpInvResMap.requireInventory" from-field="parameters.requireInventory"/> <!-- Step 1 call the cancel reservation service --> <call-service service-name="cancelOrderItemShipGrpInvRes" in-map-name="cancelOrderItemShipGrpInvResMap"/> - <!-- Step 2 call this method again and the reservation should go through --> + <!-- Step 2 call this method again and the reservation should go through --> + <entity-and entity-name="InventoryItem" list-name="inventoryItems"> + <field-map field-name="serialNumber" env-name="parameters.serialNumber"/> + <field-map field-name="productId" env-name="parameters.productId"/> + </entity-and> <set field="orderHeaderMap.orderId" from-field="parameters.orderId"/> <find-by-primary-key entity-name="OrderHeader" value-name="orderHeader" map-name="orderHeaderMap"/> - <call-simple-method method-name="reserveForInventoryItemInline"/> + <!-- Get the actual inventoryItem by the help of serialnumber and productId --> + <first-from-list list-name="inventoryItems" entry-name="inventoryItem"/> + <entity-and entity-name="OrderItemShipGrpInvRes" list-name="inventoryItemReservations"> + <field-map field-name="inventoryItemId" env-name="inventoryItem.inventoryItemId"/> + </entity-and> + <first-from-list list-name="inventoryItemReservations" entry-name="inventoryItemReservation"/> + <if-not-empty field-name="inventoryItemReservation"> + <set-service-fields map-name="inventoryItemReservation" to-map-name="reReserveOrderItemShipGrpInvResMap" service-name="reserveProductInventory"/> + <call-service service-name="reserveProductInventory" in-map-name="reReserveOrderItemShipGrpInvResMap"> + <result-to-field result-name="quantityNotReserved" field-name="paramaters.quantityNotReserved"/> + </call-service> + <set value="INV_AVAILABLE" field="inventoryItem.statusId"/> + <store-value value-name="inventoryItem"/> + </if-not-empty> <!-- Step 3 Now last thing, lets reReserve inventory for order form where we got our item. Be curtious --> - <call-service service-name="reserveProductInventory" in-map-name="reReserveOrderItemShipGrpInvResMap"> - <result-to-field result-name="quantityNotReserved" field-name="paramaters.quantityNotReserved"/> - </call-service> + <call-simple-method method-name="reserveForInventoryItemInline"/> <field-to-result field-name="quantityNotReserved" map-name="parameters"/> + <field-to-result field-name="inventoryItemId" map-name="inventoryItem"/> </simple-method> <simple-method method-name="reserveForInventoryItemInline" short-description="Does a reservation for one InventoryItem, meant to be called in-line"> - <!-- only do something with this inventoryItem if there is more inventory to reserve --> + <!-- only do something with this inventoryItem if there is more inventory to reserve --> <if-compare field-name="parameters.quantityNotReserved" operator="greater" value="0" type="Double"> <!-- get the promiseDatetime --> <get-related-one value-name="inventoryItem" relation-name="ProductFacility" to-value-name="productFacility"/> Modified: ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml?view=diff&rev=552635&r1=552634&r2=552635 ============================================================================== --- ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml (original) +++ ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml Mon Jul 2 18:15:06 2007 @@ -853,19 +853,18 @@ </check-permission> <set value="Create ShipmentPackageContent" field="operationName"/> <call-simple-method method-name="checkCanChangeShipmentStatusPacked"/> - <check-errors/> - + <check-errors/> <make-value value-name="newEntity" entity-name="ShipmentPackageContent"/> <set-pk-fields map-name="parameters" value-name="newEntity"/> <find-by-primary-key value-name="shipmentPackageContent" map-name="newEntity"/> <log level="verbose" message="In addShipmentContentToPackage trying values: ${newEntity}"/> - <if-empty field-name="shipmentPackageContent"> + <if-empty field-name="shipmentPackageContent"> <set-service-fields service-name="createShipmentPackageContent" map-name="parameters" to-map-name="createSPCMap"/> <call-service service-name="createShipmentPackageContent" in-map-name="createSPCMap"> <result-to-field result-name="shipmentPackageSeqId" field-name="newEntity.shipmentPackageSeqId"/> </call-service> <else> - <!-- add the quantities and store it --> + <!-- add the quantities and store it --> <calculate field-name="shipmentPackageContent.quantity" type="Double"> <calcop field-name="shipmentPackageContent.quantity" operator="add"><calcop field-name="parameters.quantity" operator="get"/></calcop> </calculate> @@ -1394,12 +1393,14 @@ <make-value entity-name="OrderItemShipGrpInvRes" value-name="orderItemShipGrpInvResLookupPk"/> <set-pk-fields value-name="orderItemShipGrpInvResLookupPk" map-name="parameters"/> <find-by-primary-key entity-name="OrderItemShipGrpInvRes" map-name="orderItemShipGrpInvResLookupPk" value-name="orderItemShipGrpInvRes"/> - <get-related-one to-value-name="inventoryItem" relation-name="InventoryItem" value-name="orderItemShipGrpInvRes"/> + <get-related-one to-value-name="inventoryItem" relation-name="InventoryItem" value-name="orderItemShipGrpInvRes"/> <if-compare-field operator="not-equals" field-name="inventoryItem.serialNumber" to-field-name="parameters.serialNumber"> <!-- The inventory that we have reserved is not what we shipped. Lets reReserve, this time we'll get what we want --> <set-service-fields map-name="parameters" to-map-name="reserveAnInventoryItemCtx" service-name="reserveAnInventoryItem"/> - <call-service service-name="reserveAnInventoryItem" in-map-name="reserveAnInventoryItemCtx"/> - </if-compare-field> + <call-service service-name="reserveAnInventoryItem" in-map-name="reserveAnInventoryItemCtx"> + <result-to-field result-name="inventoryItemId" field-name="parameters.inventoryItemId"/> + </call-service> + </if-compare-field> <!-- get InventoryItem issued to shipment --> <clear-field field-name="issueContext"/> <set from-field="parameters.shipmentId" field="issueContext.shipmentId"/> @@ -1409,7 +1410,6 @@ <set from-field="parameters.orderItemSeqId" field="issueContext.orderItemSeqId"/> <set from-field="parameters.inventoryItemId" field="issueContext.inventoryItemId"/> <set from-field="parameters.quantity" field="issueContext.quantity"/> - <log level="info" message="========issueContext===========${issueContext}====================="/> <call-service service-name="issueOrderItemShipGrpInvResToShipment" in-map-name="issueContext"> <result-to-field result-name="itemIssuanceId" field-name="parameters.itemIssuanceId"/> </call-service> @@ -1418,14 +1418,17 @@ <entity-one entity-name="ItemIssuance" value-name="itemIssuance"> <field-map field-name="itemIssuanceId" env-name="parameters.itemIssuanceId"/> </entity-one> - <clear-field field-name="shipItemContext"/> - <set from-field="packageMap.${itemMap.trackingNum}" field="shipItemContext.shipmentPackageSeqId"/> + <set from-field="parameters.trackingNum" field="shipItemContext.shipmentPackageSeqId"/> <if-empty field-name="shipItemContext.shipmentPackageSeqId"> <set value="New" field="shipItemContext.shipmentPackageSeqId"/> </if-empty> <log level="info" message="Package SeqID : ${shipItemContext.shipmentPackageSeqId}"/> - + + <set from-field="itemIssuance.shipmentId" field="shipPackageContext.shipmentId"/> + <set from-field="shipItemContext.shipmentPackageSeqId" field="shipPackageContext.shipmentPackageSeqId"/> + <call-service service-name="createShipmentPackage" in-map-name="shipPackageContext"/> + <set from-field="itemIssuance.shipmentId" field="shipItemContext.shipmentId"/> <set from-field="itemIssuance.shipmentItemSeqId" field="shipItemContext.shipmentItemSeqId"/> <set from-field="itemIssuance.quantity" field="shipItemContext.quantity"/> @@ -1433,7 +1436,7 @@ <result-to-field result-name="shipmentPackageSeqId" field-name="packageMap.${parameters.trackingNum}"/> <result-to-field result-name="shipmentPackageSeqId" map-name="routeSegLookup"/> </call-service> - + <if-not-empty field-name="shipmentPackageSeqId" map-name="routeSegLookup"> <set from-field="itemIssuance.shipmentId" field="routeSegLookup.shipmentId"/> <!-- quick ship orders should only have one route segment --> Modified: ofbiz/trunk/applications/product/servicedef/services_facility.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_facility.xml?view=diff&rev=552635&r1=552634&r2=552635 ============================================================================== --- ofbiz/trunk/applications/product/servicedef/services_facility.xml (original) +++ ofbiz/trunk/applications/product/servicedef/services_facility.xml Mon Jul 2 18:15:06 2007 @@ -233,7 +233,7 @@ <service name="reserveAnInventoryItem" engine="simple" location="org/ofbiz/product/inventory/InventoryReserveServices.xml" invoke="reserveAnInventoryItem" auth="true"> <description></description> - <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/> + <attribute name="inventoryItemId" type="String" mode="INOUT" optional="false"/> <attribute name="productId" type="String" mode="IN" optional="false"/> <attribute name="orderId" type="String" mode="IN" optional="false"/> <attribute name="orderItemSeqId" type="String" mode="IN" optional="false"/> @@ -242,6 +242,7 @@ <attribute name="reservedDatetime" type="Timestamp" mode="IN" optional="true"/> <attribute name="requireInventory" type="String" mode="IN" optional="false"/> <attribute name="reserveOrderEnumId" type="String" mode="IN" optional="false"/> + <attribute name="serialNumber" type="String" mode="IN" optional="true"/> <attribute name="sequenceId" type="Long" mode="IN" optional="true"/> <attribute name="quantityNotReserved" type="Double" mode="INOUT" optional="false"/> </service> 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=552635&r1=552634&r2=552635 ============================================================================== --- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java (original) +++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java Mon Jul 2 18:15:06 2007 @@ -1,450 +1,450 @@ -package org.ofbiz.oagis; - -/** -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -**/ -import java.io.InputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.sql.Timestamp; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -import javolution.util.FastList; - -import org.ofbiz.base.util.Debug; -import org.ofbiz.base.util.UtilDateTime; -import org.ofbiz.base.util.UtilMisc; -import org.ofbiz.base.util.UtilProperties; -import org.ofbiz.base.util.UtilXml; -import org.ofbiz.base.util.collections.MapStack; -import org.ofbiz.entity.GenericDelegator; -import org.ofbiz.entity.GenericEntityException; -import org.ofbiz.entity.GenericValue; -import org.ofbiz.entity.condition.EntityCondition; -import org.ofbiz.entity.condition.EntityConditionList; -import org.ofbiz.entity.condition.EntityExpr; -import org.ofbiz.entity.condition.EntityOperator; -import org.ofbiz.entity.util.EntityUtil; -import org.ofbiz.order.order.OrderReadHelper; -import org.ofbiz.service.DispatchContext; -import org.ofbiz.service.GenericServiceException; -import org.ofbiz.service.LocalDispatcher; -import org.ofbiz.service.ModelService; -import org.ofbiz.service.ServiceUtil; -import org.ofbiz.widget.fo.FoFormRenderer; -import org.ofbiz.widget.html.HtmlScreenRenderer; -import org.ofbiz.widget.screen.ScreenRenderer; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - - -public class OagisShipmentServices { - - public static final String module = OagisShipmentServices.class.getName(); - - protected static final HtmlScreenRenderer htmlScreenRenderer = new HtmlScreenRenderer(); - protected static final FoFormRenderer foFormRenderer = new FoFormRenderer(); - - public static final String resource = "OagisUiLabels"; - - public static Map showShipment(DispatchContext ctx, Map context) { - InputStream in = (InputStream) context.get("inputStream"); - LocalDispatcher dispatcher = ctx.getDispatcher(); - GenericDelegator delegator = ctx.getDelegator(); - Map result = new HashMap(); - List errorList = new LinkedList(); - try { - Document doc = UtilXml.readXmlDocument(in, true, "ShowShipment"); - GenericValue userLogin = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", "admin")); - Element showShipmentElement = doc.getDocumentElement(); - showShipmentElement.normalize(); - - Element controlAreaElement = UtilXml.firstChildElement(showShipmentElement, "N1:CNTROLAREA"); - Element bsrElement = UtilXml.firstChildElement(controlAreaElement, "N1:BSR"); - String bsrVerb = UtilXml.childElementValue(bsrElement, "N2:VERB"); - String bsrNoun = UtilXml.childElementValue(bsrElement, "N2:NOUN"); - String bsrRevision = UtilXml.childElementValue(bsrElement, "N2:REVISION"); - - result.put("bsrVerb", bsrVerb); - result.put("bsrNoun", bsrNoun); - result.put("bsrRevision", bsrRevision); - - Element senderElement = UtilXml.firstChildElement(controlAreaElement, "N1:SENDER"); - String logicalId = UtilXml.childElementValue(senderElement, "N2:LOGICALID"); - String component = UtilXml.childElementValue(senderElement, "N2:COMPONENT"); - String task = UtilXml.childElementValue(senderElement, "N2:TASK"); - String referenceId = UtilXml.childElementValue(senderElement, "N2:REFERENCEID"); - String confirmation = UtilXml.childElementValue(senderElement, "N2:CONFIRMATION"); - String authId = UtilXml.childElementValue(senderElement, "N2:AUTHID"); - - result.put("logicalId", logicalId); - result.put("component", component); - result.put("task", task); - result.put("referenceId", referenceId); - result.put("confirmation", confirmation); - result.put("authId", authId); - result.put("outgoingMessage", "N"); - result.put("userLogin", userLogin); - - Element dataAreaElement = UtilXml.firstChildElement(showShipmentElement, "n:DATAAREA"); - Element daShowShipmentElement = UtilXml.firstChildElement(dataAreaElement, "n:SHOW_SHIPMENT"); - Element shipmentElement = UtilXml.firstChildElement(daShowShipmentElement, "n:SHIPMENT"); - String shipmentId = UtilXml.childElementValue(shipmentElement, "N2:DOCUMENTID"); - - Element shipUnitElement = UtilXml.firstChildElement(showShipmentElement, "n:SHIPUNIT"); - String trackingNum = UtilXml.childElementValue(shipUnitElement, "N2:TRACKINGID"); - - Element invItem = UtilXml.firstChildElement(shipUnitElement, "n:INVITEM"); - String productId = UtilXml.childElementValue(invItem, "N2:ITEM"); - - Element invDetail = UtilXml.firstChildElement(invItem, "n:INVDETAIL"); - String serialNumber = UtilXml.childElementValue(invDetail,"N1:SERIALNUM"); - try { - GenericValue shipment = delegator.findByPrimaryKey("Shipment", UtilMisc.toMap("shipmentId", shipmentId)); - String shipGroupSeqId = shipment.getString("primaryShipGroupSeqId"); - String originFacilityId = shipment.getString("originFacilityId"); - 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))); - String orderId = orderShipment.getString("orderId"); - String orderItemSeqId = orderShipment.getString("orderItemSeqId"); - GenericValue product = delegator.findByPrimaryKey("Product",UtilMisc.toMap("productId",productId)); - String requireInventory = product.getString("requireInventory"); - 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, "quantity", shipmentItem.get("quantity"), "quantityNotReserved", shipmentItem.get("quantity")); - 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("serialNumber", serialNumber); - isitspastCtx.put("trackingNum", trackingNum); - isitspastCtx.put("inventoryItemId", orderItemShipGrpInvReservation.get("inventoryItemId")); - isitspastCtx.put("shipmentId", shipmentId); - try { - dispatcher.runSync("issueSerializedInvToShipmentPackageAndSetTracking", isitspastCtx); - } catch(GenericServiceException e) { - Debug.logInfo(e, module); - errorList.add(e.getMessage()); - } - } catch (GenericEntityException e) { - Debug.logInfo(e, module); - errorList.add(e.getMessage()); - } - } catch (Exception e) { - Debug.logError(e, module); - errorList.add(e.getMessage()); - } - result.put("contentType","text/plain"); - if (errorList.size() > 0) { - // error message generation - result.put(ModelService.RESPONSE_MESSAGE,ModelService.RESPOND_ERROR); - result.put(ModelService.ERROR_MESSAGE_LIST, errorList); - result.put("reasonCode", "1000"); - result.put("description", "processing message failed"); - return result; - } - return result; - } - - public static Map processShipment(DispatchContext ctx, Map context) { - LocalDispatcher dispatcher = ctx.getDispatcher(); - GenericDelegator delegator = ctx.getDelegator(); - String orderId = (String) context.get("orderId"); - String shipmentId = (String) context.get("shipmentId"); - GenericValue userLogin = (GenericValue) context.get("userLogin"); - Map result = ServiceUtil.returnSuccess(); - MapStack bodyParameters = MapStack.create(); - if (userLogin == null) { - try { - userLogin = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", "admin")); - } catch (GenericEntityException e) { - Debug.logError(e, "Error getting userLogin", module); - } - } - GenericValue orderHeader = null; - GenericValue orderItemShipGroup = null; - try { - orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId)); - } catch (GenericEntityException e) { - Debug.logError(e, module); - return ServiceUtil.returnError(e.getMessage()); - } - GenericValue shipment =null; - if (orderHeader != null) { - String orderStatusId = orderHeader.getString("statusId"); - if (orderStatusId.equals("ORDER_APPROVED")) { - try { - Map cospResult= dispatcher.runSync("createOrderShipmentPlan", UtilMisc.toMap("orderId", orderId, "userLogin", userLogin)); - shipmentId = (String) cospResult.get("shipmentId"); - } catch (GenericServiceException e) { - Debug.logError(e, module); - return ServiceUtil.returnError(e.getMessage()); - } - try { - shipment = delegator.findByPrimaryKey("Shipment", UtilMisc.toMap("shipmentId", shipmentId)); - bodyParameters.put("shipment", shipment); - OrderReadHelper orderReadHelper = new OrderReadHelper(orderHeader); - if(orderReadHelper.hasShippingAddress()) { - GenericValue address = EntityUtil.getFirst(orderReadHelper.getShippingLocations()); - bodyParameters.put("address", address); - } - String emailString = orderReadHelper.getOrderEmailString(); - bodyParameters.put("emailString", emailString); - - String contactMechId = shipment.getString("destinationTelecomNumberId"); - GenericValue telecomNumber = delegator.findByPrimaryKey("TelecomNumber", UtilMisc.toMap("contactMechId", contactMechId)); - bodyParameters.put("telecomNumber", telecomNumber); - - List shipmentItems = delegator.findByAnd("ShipmentItem", UtilMisc.toMap("shipmentId", shipmentId)); - bodyParameters.put("shipmentItems", shipmentItems); - - orderItemShipGroup = EntityUtil.getFirst(delegator.findByAnd("OrderItemShipGroup", UtilMisc.toMap("orderId", orderId))); - bodyParameters.put("orderItemShipGroup", orderItemShipGroup); - } catch (GenericEntityException e) { - Debug.logError(e, module); - } - Set correspondingPoIdSet = new TreeSet(); - try { - List orderItems = delegator.findByAnd("OrderItem", UtilMisc.toMap("orderId", shipment.getString("primaryOrderId"))); - Iterator oiIter = orderItems.iterator(); - while (oiIter.hasNext()) { - GenericValue orderItem = (GenericValue) oiIter.next(); - String correspondingPoId = orderItem.getString("correspondingPoId"); - correspondingPoIdSet.add(correspondingPoId); - bodyParameters.put("correspondingPoIdSet", correspondingPoIdSet); - } - } catch (GenericEntityException e) { - Debug.logError(e, module); - } - Set externalIdSet = new TreeSet(); - try { - GenericValue primaryOrderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", shipment.getString("primaryOrderId"))); - externalIdSet.add(primaryOrderHeader.getString("externalId")); - bodyParameters.put("externalIdSet", externalIdSet); - } catch (GenericEntityException e) { - Debug.logError(e, module); - } - // if order was a return replacement order (associated with return) - List returnItemResponses = null; - List returnItemRespExprs = UtilMisc.toList(new EntityExpr("replacementOrderId", EntityOperator.NOT_EQUAL, null)); - EntityCondition returnItemRespCond = new EntityConditionList(returnItemRespExprs, EntityOperator.AND); - // list of fields to select (initial list) - List fieldsToSelect = FastList.newInstance(); - fieldsToSelect.add("replacementOrderId"); - try { - returnItemResponses = delegator.findByCondition("ReturnItemResponse", returnItemRespCond, fieldsToSelect, null); - Iterator rirIter = returnItemResponses.iterator(); - while (rirIter.hasNext()) { - if (rirIter.next().equals(shipment.getString("primaryOrderId"))) { - bodyParameters.put("shipnotes", "RETURNLABEL"); - } - } - } catch (GenericEntityException e) { - Debug.logError(e, module); - } - String logicalId = UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.LOGICALID"); - bodyParameters.put("logicalId", logicalId); - result.put("logicalId", logicalId); - - String authId = UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.AUTHID"); - bodyParameters.put("authId", authId); - result.put("authId", authId); - - String referenceId = delegator.getNextSeqId("OagisMessageInfo"); - bodyParameters.put("referenceId", referenceId); - result.put("referenceId", referenceId); - - DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'Z"); - Timestamp timestamp = UtilDateTime.nowTimestamp(); - String sentDate = dateFormat.format(timestamp); - bodyParameters.put("sentDate", sentDate); - result.put("sentDate", timestamp); - - // tracking shipper account - String partyId = shipment.getString("partyIdTo"); - List partyCarrierAccounts = new ArrayList(); - try { - partyCarrierAccounts = delegator.findByAnd("PartyCarrierAccount", UtilMisc.toMap("partyId", partyId)); - partyCarrierAccounts = EntityUtil.filterByDate(partyCarrierAccounts); - if (partyCarrierAccounts != null) { - Iterator pcaIter = partyCarrierAccounts.iterator(); - while (pcaIter.hasNext()) { - GenericValue partyCarrierAccount = (GenericValue) pcaIter.next(); - String carrierPartyId = partyCarrierAccount.getString("carrierPartyId"); - if (carrierPartyId.equals(orderItemShipGroup.getString("carrierPartyId"))) { - String accountNumber = partyCarrierAccount.getString("accountNumber"); - bodyParameters.put("shipperId", accountNumber); - } - } - } - } catch (GenericEntityException e) { - Debug.logError(e, module); - } - bodyParameters.put("shipmentId", shipmentId); - bodyParameters.put("orderId", orderId); - bodyParameters.put("userLogin", userLogin); - String bodyScreenUri = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Template.ProcessShipment"); - OutputStream out = (OutputStream) context.get("outputStream"); - Writer writer = new OutputStreamWriter(out); - ScreenRenderer screens = new ScreenRenderer(writer, bodyParameters, new HtmlScreenRenderer()); - try { - screens.render(bodyScreenUri); - } catch (Exception e) { - Debug.logError(e, "Error rendering [text/xml]: ", module); - } - // prepare map to Create Oagis Message Info - result.put("component", "INVENTORY"); - result.put("task", "SHIPREQUES"); // Actual value of task is "SHIPREQUEST" which is more than 10 char - result.put("outgoingMessage", "Y"); - result.put("confirmation", "1"); - result.put("bsrVerb", "PROCESS"); - result.put("bsrNoun", "SHIPMENT"); - result.put("bsrRevision", "001"); - result.put("processingStatusId", orderStatusId); - result.put("orderId", orderId); - result.put("shipmentId", shipmentId); - result.put("userLogin", userLogin); - } - } - return result; - } - - public static Map receiveDelivery(DispatchContext dctx, Map context) { - GenericDelegator delegator = dctx.getDelegator(); - String returnId = (String) context.get("returnId"); - GenericValue userLogin = (GenericValue) context.get("userLogin"); - Map result = ServiceUtil.returnSuccess(); - MapStack bodyParameters = MapStack.create(); - if (userLogin == null) { - try { - userLogin = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", "admin")); - } catch (GenericEntityException e) { - Debug.logError(e, "Error getting userLogin", module); - } - } - if (returnId != null) { - GenericValue returnHeader = null; - String statusId =null; - try { - returnHeader = delegator.findByPrimaryKey("ReturnHeader", UtilMisc.toMap("returnId", returnId)); - statusId = returnHeader.getString("statusId"); - } catch (GenericEntityException e) { - Debug.logError(e, module); - } - if (statusId.equals("RETURN_ACCEPTED")) { - try { - List returnItems = delegator.findByAnd("ReturnItem", UtilMisc.toMap("returnId", returnId)); - bodyParameters.put("returnItems", returnItems); - - String orderId = EntityUtil.getFirst(returnItems).getString("orderId"); - result.put("orderId", orderId); - - GenericValue postalAddress = delegator.findByPrimaryKey("PostalAddress", UtilMisc.toMap("contactMechId", returnHeader.getString("originContactMechId"))); - bodyParameters.put("postalAddress", postalAddress); - - // calculate total qty of return items in a shipping unit received, order associated with return - double itemQty = 0.0; - double totalQty = 0.0; - Iterator riIter = returnItems.iterator(); - while (riIter.hasNext()) { - GenericValue returnItem = (GenericValue) riIter.next(); - itemQty = returnItem.getDouble("returnQuantity").doubleValue(); - totalQty = totalQty + itemQty; - } - bodyParameters.put("totalQty", new Double(totalQty)); - - String partyId = returnHeader.getString("fromPartyId"); - List partyContactMechs = delegator.findByAnd("PartyContactMech", UtilMisc.toMap("partyId", partyId)); - Iterator pcmIter = partyContactMechs.iterator(); - while (pcmIter.hasNext()) { - GenericValue partyContactMech = (GenericValue) pcmIter.next(); - String contactMechId = partyContactMech.getString("contactMechId"); - GenericValue contactMech = delegator.findByPrimaryKey("ContactMech", UtilMisc.toMap("contactMechId", contactMechId)); - String contactMechTypeId = contactMech.getString("contactMechTypeId"); - if(contactMechTypeId.equals("EMAIL_ADDRESS")) { - String emailString = contactMech.getString("infoString"); - bodyParameters.put("emailString", emailString); - } - if(contactMechTypeId.equals("TELECOM_NUMBER")) { - GenericValue telecomNumber = delegator.findByPrimaryKey("TelecomNumber", UtilMisc.toMap("contactMechId", contactMechId)); - bodyParameters.put("telecomNumber", telecomNumber); - } - } - } catch (GenericEntityException e) { - Debug.logError(e, module); - } - String logicalId = UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.LOGICALID"); - bodyParameters.put("logicalId", logicalId); - result.put("logicalId", logicalId); - - String authId = UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.AUTHID"); - bodyParameters.put("authId", authId); - result.put("authId", authId); - - String referenceId = delegator.getNextSeqId("OagisMessageInfo"); - bodyParameters.put("referenceId", referenceId); - result.put("referenceId", referenceId); - - DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'Z"); - Timestamp timestamp = UtilDateTime.nowTimestamp(); - String sentDate = dateFormat.format(timestamp); - bodyParameters.put("sentDate", sentDate); - result.put("sentDate", timestamp); - - bodyParameters.put("returnId", returnId); - String bodyScreenUri = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Template.ReceiveDelivery"); - OutputStream out = (OutputStream) context.get("outputStream"); - Writer writer = new OutputStreamWriter(out); - ScreenRenderer screens = new ScreenRenderer(writer, bodyParameters, new HtmlScreenRenderer()); - try { - screens.render(bodyScreenUri); - } catch (Exception e) { - Debug.logError(e, "Error rendering [text/xml]: ", module); - } - // prepare map to store BOD information - result.put("component", "INVENTORY"); - result.put("task", "RMA"); - result.put("outgoingMessage", "Y"); - result.put("confirmation", "1"); - result.put("bsrVerb", "RECEIVE"); - result.put("bsrNoun", "DELIVERY"); - result.put("bsrRevision", "001"); - result.put("processingStatusId", statusId); - result.put("returnId", returnId); - result.put("userLogin", userLogin); - } - } - return result; - } -} +package org.ofbiz.oagis; + +/** +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +**/ +import java.io.InputStream; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import javolution.util.FastList; + +import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.UtilDateTime; +import org.ofbiz.base.util.UtilMisc; +import org.ofbiz.base.util.UtilProperties; +import org.ofbiz.base.util.UtilXml; +import org.ofbiz.base.util.collections.MapStack; +import org.ofbiz.entity.GenericDelegator; +import org.ofbiz.entity.GenericEntityException; +import org.ofbiz.entity.GenericValue; +import org.ofbiz.entity.condition.EntityCondition; +import org.ofbiz.entity.condition.EntityConditionList; +import org.ofbiz.entity.condition.EntityExpr; +import org.ofbiz.entity.condition.EntityOperator; +import org.ofbiz.entity.util.EntityUtil; +import org.ofbiz.order.order.OrderReadHelper; +import org.ofbiz.service.DispatchContext; +import org.ofbiz.service.GenericServiceException; +import org.ofbiz.service.LocalDispatcher; +import org.ofbiz.service.ModelService; +import org.ofbiz.service.ServiceUtil; +import org.ofbiz.widget.fo.FoFormRenderer; +import org.ofbiz.widget.html.HtmlScreenRenderer; +import org.ofbiz.widget.screen.ScreenRenderer; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + + +public class OagisShipmentServices { + + public static final String module = OagisShipmentServices.class.getName(); + + protected static final HtmlScreenRenderer htmlScreenRenderer = new HtmlScreenRenderer(); + protected static final FoFormRenderer foFormRenderer = new FoFormRenderer(); + + public static final String resource = "OagisUiLabels"; + + public static Map showShipment(DispatchContext ctx, Map context) { + InputStream in = (InputStream) context.get("inputStream"); + LocalDispatcher dispatcher = ctx.getDispatcher(); + GenericDelegator delegator = ctx.getDelegator(); + Map result = new HashMap(); + List errorList = new LinkedList(); + try { + Document doc = UtilXml.readXmlDocument(in, true, "ShowShipment"); + GenericValue userLogin = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", "admin")); + Element showShipmentElement = doc.getDocumentElement(); + showShipmentElement.normalize(); + + Element controlAreaElement = UtilXml.firstChildElement(showShipmentElement, "N1:CNTROLAREA"); + Element bsrElement = UtilXml.firstChildElement(controlAreaElement, "N1:BSR"); + String bsrVerb = UtilXml.childElementValue(bsrElement, "N2:VERB"); + String bsrNoun = UtilXml.childElementValue(bsrElement, "N2:NOUN"); + String bsrRevision = UtilXml.childElementValue(bsrElement, "N2:REVISION"); + + result.put("bsrVerb", bsrVerb); + result.put("bsrNoun", bsrNoun); + result.put("bsrRevision", bsrRevision); + + Element senderElement = UtilXml.firstChildElement(controlAreaElement, "N1:SENDER"); + String logicalId = UtilXml.childElementValue(senderElement, "N2:LOGICALID"); + String component = UtilXml.childElementValue(senderElement, "N2:COMPONENT"); + String task = UtilXml.childElementValue(senderElement, "N2:TASK"); + String referenceId = UtilXml.childElementValue(senderElement, "N2:REFERENCEID"); + String confirmation = UtilXml.childElementValue(senderElement, "N2:CONFIRMATION"); + String authId = UtilXml.childElementValue(senderElement, "N2:AUTHID"); + + result.put("logicalId", logicalId); + result.put("component", component); + result.put("task", task); + result.put("referenceId", referenceId); + result.put("confirmation", confirmation); + result.put("authId", authId); + result.put("outgoingMessage", "N"); + result.put("userLogin", userLogin); + + Element dataAreaElement = UtilXml.firstChildElement(showShipmentElement, "n:DATAAREA"); + Element daShowShipmentElement = UtilXml.firstChildElement(dataAreaElement, "n:SHOW_SHIPMENT"); + Element shipmentElement = UtilXml.firstChildElement(daShowShipmentElement, "n:SHIPMENT"); + String shipmentId = UtilXml.childElementValue(shipmentElement, "N2:DOCUMENTID"); + + Element shipUnitElement = UtilXml.firstChildElement(daShowShipmentElement, "n:SHIPUNIT"); + String trackingNum = UtilXml.childElementValue(shipUnitElement, "N2:TRACKINGID"); + + Element invItem = UtilXml.firstChildElement(shipUnitElement, "n:INVITEM"); + String productId = UtilXml.childElementValue(invItem, "N2:ITEM"); + + Element invDetail = UtilXml.firstChildElement(invItem, "n:INVDETAIL"); + String serialNumber = UtilXml.childElementValue(invDetail,"N1:SERIALNUM"); + try { + GenericValue shipment = delegator.findByPrimaryKey("Shipment", UtilMisc.toMap("shipmentId", shipmentId)); + String shipGroupSeqId = shipment.getString("primaryShipGroupSeqId"); + String originFacilityId = shipment.getString("originFacilityId"); + 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))); + String orderId = orderShipment.getString("orderId"); + String orderItemSeqId = orderShipment.getString("orderItemSeqId"); + GenericValue product = delegator.findByPrimaryKey("Product",UtilMisc.toMap("productId",productId)); + String requireInventory = product.getString("requireInventory"); + 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, "quantity", shipmentItem.get("quantity"), "quantityNotReserved", shipmentItem.get("quantity")); + 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("serialNumber", serialNumber); + isitspastCtx.put("trackingNum", trackingNum); + isitspastCtx.put("inventoryItemId", orderItemShipGrpInvReservation.get("inventoryItemId")); + isitspastCtx.put("shipmentId", shipmentId); + try { + dispatcher.runSync("issueSerializedInvToShipmentPackageAndSetTracking", isitspastCtx); + } catch(GenericServiceException e) { + Debug.logInfo(e, module); + errorList.add(e.getMessage()); + } + } catch (GenericEntityException e) { + Debug.logInfo(e, module); + errorList.add(e.getMessage()); + } + } catch (Exception e) { + Debug.logError(e, module); + errorList.add(e.getMessage()); + } + result.put("contentType","text/plain"); + if (errorList.size() > 0) { + // error message generation + result.put(ModelService.RESPONSE_MESSAGE,ModelService.RESPOND_ERROR); + result.put(ModelService.ERROR_MESSAGE_LIST, errorList); + result.put("reasonCode", "1000"); + result.put("description", "processing message failed"); + return result; + } + return result; + } + + public static Map processShipment(DispatchContext ctx, Map context) { + LocalDispatcher dispatcher = ctx.getDispatcher(); + GenericDelegator delegator = ctx.getDelegator(); + String orderId = (String) context.get("orderId"); + String shipmentId = (String) context.get("shipmentId"); + GenericValue userLogin = (GenericValue) context.get("userLogin"); + Map result = ServiceUtil.returnSuccess(); + MapStack bodyParameters = MapStack.create(); + if (userLogin == null) { + try { + userLogin = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", "admin")); + } catch (GenericEntityException e) { + Debug.logError(e, "Error getting userLogin", module); + } + } + GenericValue orderHeader = null; + GenericValue orderItemShipGroup = null; + try { + orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId)); + } catch (GenericEntityException e) { + Debug.logError(e, module); + return ServiceUtil.returnError(e.getMessage()); + } + GenericValue shipment =null; + if (orderHeader != null) { + String orderStatusId = orderHeader.getString("statusId"); + if (orderStatusId.equals("ORDER_APPROVED")) { + try { + Map cospResult= dispatcher.runSync("createOrderShipmentPlan", UtilMisc.toMap("orderId", orderId, "userLogin", userLogin)); + shipmentId = (String) cospResult.get("shipmentId"); + } catch (GenericServiceException e) { + Debug.logError(e, module); + return ServiceUtil.returnError(e.getMessage()); + } + try { + shipment = delegator.findByPrimaryKey("Shipment", UtilMisc.toMap("shipmentId", shipmentId)); + bodyParameters.put("shipment", shipment); + OrderReadHelper orderReadHelper = new OrderReadHelper(orderHeader); + if(orderReadHelper.hasShippingAddress()) { + GenericValue address = EntityUtil.getFirst(orderReadHelper.getShippingLocations()); + bodyParameters.put("address", address); + } + String emailString = orderReadHelper.getOrderEmailString(); + bodyParameters.put("emailString", emailString); + + String contactMechId = shipment.getString("destinationTelecomNumberId"); + GenericValue telecomNumber = delegator.findByPrimaryKey("TelecomNumber", UtilMisc.toMap("contactMechId", contactMechId)); + bodyParameters.put("telecomNumber", telecomNumber); + + List shipmentItems = delegator.findByAnd("ShipmentItem", UtilMisc.toMap("shipmentId", shipmentId)); + bodyParameters.put("shipmentItems", shipmentItems); + + orderItemShipGroup = EntityUtil.getFirst(delegator.findByAnd("OrderItemShipGroup", UtilMisc.toMap("orderId", orderId))); + bodyParameters.put("orderItemShipGroup", orderItemShipGroup); + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + Set correspondingPoIdSet = new TreeSet(); + try { + List orderItems = delegator.findByAnd("OrderItem", UtilMisc.toMap("orderId", shipment.getString("primaryOrderId"))); + Iterator oiIter = orderItems.iterator(); + while (oiIter.hasNext()) { + GenericValue orderItem = (GenericValue) oiIter.next(); + String correspondingPoId = orderItem.getString("correspondingPoId"); + correspondingPoIdSet.add(correspondingPoId); + bodyParameters.put("correspondingPoIdSet", correspondingPoIdSet); + } + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + Set externalIdSet = new TreeSet(); + try { + GenericValue primaryOrderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", shipment.getString("primaryOrderId"))); + externalIdSet.add(primaryOrderHeader.getString("externalId")); + bodyParameters.put("externalIdSet", externalIdSet); + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + // if order was a return replacement order (associated with return) + List returnItemResponses = null; + List returnItemRespExprs = UtilMisc.toList(new EntityExpr("replacementOrderId", EntityOperator.NOT_EQUAL, null)); + EntityCondition returnItemRespCond = new EntityConditionList(returnItemRespExprs, EntityOperator.AND); + // list of fields to select (initial list) + List fieldsToSelect = FastList.newInstance(); + fieldsToSelect.add("replacementOrderId"); + try { + returnItemResponses = delegator.findByCondition("ReturnItemResponse", returnItemRespCond, fieldsToSelect, null); + Iterator rirIter = returnItemResponses.iterator(); + while (rirIter.hasNext()) { + if (rirIter.next().equals(shipment.getString("primaryOrderId"))) { + bodyParameters.put("shipnotes", "RETURNLABEL"); + } + } + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + String logicalId = UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.LOGICALID"); + bodyParameters.put("logicalId", logicalId); + result.put("logicalId", logicalId); + + String authId = UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.AUTHID"); + bodyParameters.put("authId", authId); + result.put("authId", authId); + + String referenceId = delegator.getNextSeqId("OagisMessageInfo"); + bodyParameters.put("referenceId", referenceId); + result.put("referenceId", referenceId); + + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'Z"); + Timestamp timestamp = UtilDateTime.nowTimestamp(); + String sentDate = dateFormat.format(timestamp); + bodyParameters.put("sentDate", sentDate); + result.put("sentDate", timestamp); + + // tracking shipper account + String partyId = shipment.getString("partyIdTo"); + List partyCarrierAccounts = new ArrayList(); + try { + partyCarrierAccounts = delegator.findByAnd("PartyCarrierAccount", UtilMisc.toMap("partyId", partyId)); + partyCarrierAccounts = EntityUtil.filterByDate(partyCarrierAccounts); + if (partyCarrierAccounts != null) { + Iterator pcaIter = partyCarrierAccounts.iterator(); + while (pcaIter.hasNext()) { + GenericValue partyCarrierAccount = (GenericValue) pcaIter.next(); + String carrierPartyId = partyCarrierAccount.getString("carrierPartyId"); + if (carrierPartyId.equals(orderItemShipGroup.getString("carrierPartyId"))) { + String accountNumber = partyCarrierAccount.getString("accountNumber"); + bodyParameters.put("shipperId", accountNumber); + } + } + } + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + bodyParameters.put("shipmentId", shipmentId); + bodyParameters.put("orderId", orderId); + bodyParameters.put("userLogin", userLogin); + String bodyScreenUri = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Template.ProcessShipment"); + OutputStream out = (OutputStream) context.get("outputStream"); + Writer writer = new OutputStreamWriter(out); + ScreenRenderer screens = new ScreenRenderer(writer, bodyParameters, new HtmlScreenRenderer()); + try { + screens.render(bodyScreenUri); + } catch (Exception e) { + Debug.logError(e, "Error rendering [text/xml]: ", module); + } + // prepare map to Create Oagis Message Info + result.put("component", "INVENTORY"); + result.put("task", "SHIPREQUES"); // Actual value of task is "SHIPREQUEST" which is more than 10 char + result.put("outgoingMessage", "Y"); + result.put("confirmation", "1"); + result.put("bsrVerb", "PROCESS"); + result.put("bsrNoun", "SHIPMENT"); + result.put("bsrRevision", "001"); + result.put("processingStatusId", orderStatusId); + result.put("orderId", orderId); + result.put("shipmentId", shipmentId); + result.put("userLogin", userLogin); + } + } + return result; + } + + public static Map receiveDelivery(DispatchContext dctx, Map context) { + GenericDelegator delegator = dctx.getDelegator(); + String returnId = (String) context.get("returnId"); + GenericValue userLogin = (GenericValue) context.get("userLogin"); + Map result = ServiceUtil.returnSuccess(); + MapStack bodyParameters = MapStack.create(); + if (userLogin == null) { + try { + userLogin = delegator.findByPrimaryKey("UserLogin", UtilMisc.toMap("userLoginId", "admin")); + } catch (GenericEntityException e) { + Debug.logError(e, "Error getting userLogin", module); + } + } + if (returnId != null) { + GenericValue returnHeader = null; + String statusId =null; + try { + returnHeader = delegator.findByPrimaryKey("ReturnHeader", UtilMisc.toMap("returnId", returnId)); + statusId = returnHeader.getString("statusId"); + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + if (statusId.equals("RETURN_ACCEPTED")) { + try { + List returnItems = delegator.findByAnd("ReturnItem", UtilMisc.toMap("returnId", returnId)); + bodyParameters.put("returnItems", returnItems); + + String orderId = EntityUtil.getFirst(returnItems).getString("orderId"); + result.put("orderId", orderId); + + GenericValue postalAddress = delegator.findByPrimaryKey("PostalAddress", UtilMisc.toMap("contactMechId", returnHeader.getString("originContactMechId"))); + bodyParameters.put("postalAddress", postalAddress); + + // calculate total qty of return items in a shipping unit received, order associated with return + double itemQty = 0.0; + double totalQty = 0.0; + Iterator riIter = returnItems.iterator(); + while (riIter.hasNext()) { + GenericValue returnItem = (GenericValue) riIter.next(); + itemQty = returnItem.getDouble("returnQuantity").doubleValue(); + totalQty = totalQty + itemQty; + } + bodyParameters.put("totalQty", new Double(totalQty)); + + String partyId = returnHeader.getString("fromPartyId"); + List partyContactMechs = delegator.findByAnd("PartyContactMech", UtilMisc.toMap("partyId", partyId)); + Iterator pcmIter = partyContactMechs.iterator(); + while (pcmIter.hasNext()) { + GenericValue partyContactMech = (GenericValue) pcmIter.next(); + String contactMechId = partyContactMech.getString("contactMechId"); + GenericValue contactMech = delegator.findByPrimaryKey("ContactMech", UtilMisc.toMap("contactMechId", contactMechId)); + String contactMechTypeId = contactMech.getString("contactMechTypeId"); + if(contactMechTypeId.equals("EMAIL_ADDRESS")) { + String emailString = contactMech.getString("infoString"); + bodyParameters.put("emailString", emailString); + } + if(contactMechTypeId.equals("TELECOM_NUMBER")) { + GenericValue telecomNumber = delegator.findByPrimaryKey("TelecomNumber", UtilMisc.toMap("contactMechId", contactMechId)); + bodyParameters.put("telecomNumber", telecomNumber); + } + } + } catch (GenericEntityException e) { + Debug.logError(e, module); + } + String logicalId = UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.LOGICALID"); + bodyParameters.put("logicalId", logicalId); + result.put("logicalId", logicalId); + + String authId = UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.AUTHID"); + bodyParameters.put("authId", authId); + result.put("authId", authId); + + String referenceId = delegator.getNextSeqId("OagisMessageInfo"); + bodyParameters.put("referenceId", referenceId); + result.put("referenceId", referenceId); + + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'Z"); + Timestamp timestamp = UtilDateTime.nowTimestamp(); + String sentDate = dateFormat.format(timestamp); + bodyParameters.put("sentDate", sentDate); + result.put("sentDate", timestamp); + + bodyParameters.put("returnId", returnId); + String bodyScreenUri = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Template.ReceiveDelivery"); + OutputStream out = (OutputStream) context.get("outputStream"); + Writer writer = new OutputStreamWriter(out); + ScreenRenderer screens = new ScreenRenderer(writer, bodyParameters, new HtmlScreenRenderer()); + try { + screens.render(bodyScreenUri); + } catch (Exception e) { + Debug.logError(e, "Error rendering [text/xml]: ", module); + } + // prepare map to store BOD information + result.put("component", "INVENTORY"); + result.put("task", "RMA"); + result.put("outgoingMessage", "Y"); + result.put("confirmation", "1"); + result.put("bsrVerb", "RECEIVE"); + result.put("bsrNoun", "DELIVERY"); + result.put("bsrRevision", "001"); + result.put("processingStatusId", statusId); + result.put("returnId", returnId); + result.put("userLogin", userLogin); + } + } + return result; + } +} |
Free forum by Nabble | Edit this page |