Author: jonesde
Date: Wed Sep 19 17:45:54 2007
New Revision: 577486
URL: http://svn.apache.org/viewvc?rev=577486&view=rev
Log:
Refactored for better error handling, especially in send receive delivery for
return but also a couple of improvement in send process shipment
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?rev=577486&r1=577485&r2=577486&view=diff
==============================================================================
---
ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java
(original)
+++
ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java
Wed Sep 19 17:45:54 2007
@@ -76,6 +76,8 @@
protected static final HtmlScreenRenderer htmlScreenRenderer = new
HtmlScreenRenderer();
protected static final FoFormRenderer foFormRenderer = new
FoFormRenderer();
+ public static final Set invalidShipmentStatusSet =
UtilMisc.toSet("SHIPMENT_CANCELLED", "SHIPMENT_PICKED", "SHIPMENT_PACKED",
"SHIPMENT_SHIPPED", "SHIPMENT_DELIVERED");
+
public static final String resource = "OagisUiLabels";
public static final String certAlias =
UtilProperties.getPropertyValue("oagis.properties",
"auth.client.certificate.alias");
@@ -206,8 +208,7 @@
String errMsg = "Could not find Shipment ID [" + shipmentId + "]";
errorMapList.add(UtilMisc.toMap("description", errMsg,
"reasonCode", "ShipmentIdNotValid"));
} else {
- Set invalidStatusSet = UtilMisc.toSet("SHIPMENT_CANCELLED",
"SHIPMENT_PICKED", "SHIPMENT_PACKED", "SHIPMENT_SHIPPED", "SHIPMENT_DELIVERED");
- if (invalidStatusSet.contains(shipment.get("statusId"))) {
+ if (invalidShipmentStatusSet.contains(shipment.get("statusId"))) {
String errMsg = "Shipment with ID [" + shipmentId + "] is in a
status [" + shipment.get("statusId") + "] that means it has been or is being
shipped, so this Show Shipment message may be a duplicate.";
errorMapList.add(UtilMisc.toMap("description", errMsg,
"reasonCode", "ShipmentInBadStatus"));
}
@@ -743,203 +744,210 @@
}
orderHeader = delegator.findByPrimaryKey("OrderHeader",
UtilMisc.toMap("orderId", orderId));
- if (orderHeader != null) {
- String orderStatusId = orderHeader.getString("statusId");
- if ("ORDER_APPROVED".equals(orderStatusId) &&
"SALES_ORDER".equals(orderHeader.getString("orderTypeId"))) {
- // first check some things...
- OrderReadHelper orderReadHelper = new
OrderReadHelper(orderHeader);
- // before doing or saving anything see if any OrderItems
are Products with isPhysical=Y
- if (!orderReadHelper.hasPhysicalProductItems()) {
- // no need to process shipment, return success
- return ServiceUtil.returnSuccess();
- }
- if (!orderReadHelper.hasShippingAddress()) {
- return ServiceUtil.returnError("Cannot send Process
Shipment for order [" + orderId + "], it has no shipping address.");
- }
+ if (orderHeader == null) {
+ return ServiceUtil.returnError("Could not find OrderHeader
with ID [" + orderId + "]");
+ }
+
+ String orderStatusId = orderHeader.getString("statusId");
+ if (!"ORDER_APPROVED".equals(orderStatusId)) {
+ return ServiceUtil.returnError("OrderHeader not in the
approved status (ORDER_APPROVED) with ID [" + orderId + "]");
+ }
+ if ("SALES_ORDER".equals(orderHeader.getString("orderTypeId"))) {
+ return ServiceUtil.returnError("OrderHeader not a sales order
(SALES_ORDER) with ID [" + orderId + "]");
+ }
+
+ // first check some things...
+ OrderReadHelper orderReadHelper = new OrderReadHelper(orderHeader);
+ // before doing or saving anything see if any OrderItems are
Products with isPhysical=Y
+ if (!orderReadHelper.hasPhysicalProductItems()) {
+ // no need to process shipment, return success
+ return ServiceUtil.returnSuccess();
+ }
+ if (!orderReadHelper.hasShippingAddress()) {
+ return ServiceUtil.returnError("Cannot send Process Shipment
for order [" + orderId + "], it has no shipping address.");
+ }
- referenceId = delegator.getNextSeqId("OagisMessageInfo");
- omiPkMap = UtilMisc.toMap("logicalId", logicalId,
"component", component, "task", task, "referenceId", referenceId);
+ referenceId = delegator.getNextSeqId("OagisMessageInfo");
+ omiPkMap = UtilMisc.toMap("logicalId", logicalId, "component",
component, "task", task, "referenceId", referenceId);
- String authId =
UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.AUTHID");
- Timestamp timestamp = UtilDateTime.nowTimestamp();
- String sentDate =
OagisServices.isoDateFormat.format(timestamp);
-
- bodyParameters.putAll(omiPkMap);
- bodyParameters.put("authId", authId);
- bodyParameters.put("sentDate", sentDate);
-
- // prepare map to Create Oagis Message Info
- try {
- Map comiCtx = FastMap.newInstance();
- comiCtx.putAll(omiPkMap);
- comiCtx.put("processingStatusId", "OAGMP_TRIGGERED");
- comiCtx.put("outgoingMessage", "Y");
- comiCtx.put("confirmation", "1");
- comiCtx.put("bsrVerb", "PROCESS");
- comiCtx.put("bsrNoun", "SHIPMENT");
- comiCtx.put("bsrRevision", "001");
- comiCtx.put("orderId", orderId);
- comiCtx.put("sentDate", timestamp);
- comiCtx.put("authId", authId);
- comiCtx.put("userLogin", userLogin);
- dispatcher.runSync("createOagisMessageInfo", comiCtx,
60, true);
- } catch (GenericServiceException e) {
- String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
- Debug.logError(e, errMsg, module);
- }
- if (Debug.infoOn()) Debug.logInfo("Saved OagisMessageInfo
for oagisSendProcessShipment message for orderId [" + orderId + "]", module);
+ String authId =
UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.AUTHID");
+ Timestamp timestamp = UtilDateTime.nowTimestamp();
+ String sentDate = OagisServices.isoDateFormat.format(timestamp);
+
+ bodyParameters.putAll(omiPkMap);
+ bodyParameters.put("authId", authId);
+ bodyParameters.put("sentDate", sentDate);
- // check to see if there is already a Shipment for this
order
- EntityCondition findShipmentCondition = new
EntityConditionList(UtilMisc.toList(
- new EntityExpr("primaryOrderId",
EntityOperator.EQUALS, orderId),
- new EntityExpr("statusId",
EntityOperator.NOT_EQUAL, "SHIPMENT_CANCELLED")
- ), EntityOperator.AND);
- List shipmentList = delegator.findByCondition("Shipment",
findShipmentCondition, null, null);
- GenericValue shipment = EntityUtil.getFirst(shipmentList);
-
- if (shipment != null) {
- // if picked, packed, shipped, delivered then
complain, no reason to process the shipment!
- String statusId = shipment.getString("statusId");
- if ("SHIPMENT_PICKED".equals(statusId) ||
"SHIPMENT_PACKED".equals(statusId) || "SHIPMENT_SHIPPED".equals(statusId) ||
"SHIPMENT_DELIVERED".equals(statusId)) {
- return ServiceUtil.returnError("Not sending
Process Shipment message because found Shipment that is already being
processed, is in status [" + statusId + "]");
- }
- shipmentId = shipment.getString("shipmentId");
- } else {
- Map cospResult=
dispatcher.runSync("createOrderShipmentPlan", UtilMisc.toMap("orderId",
orderId, "userLogin", userLogin));
- shipmentId = (String) cospResult.get("shipmentId");
- shipment = delegator.findByPrimaryKey("Shipment",
UtilMisc.toMap("shipmentId", shipmentId));
- }
-
- bodyParameters.put("shipment", shipment);
- List shipmentItems = delegator.findByAnd("ShipmentItem",
UtilMisc.toMap("shipmentId", shipmentId));
- bodyParameters.put("shipmentItems", shipmentItems);
-
- 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));
- if (telecomNumber == null) {
- return ServiceUtil.returnError("In Send
ProcessShipment Telecom number not found for orderId [" + orderId + "]");
- }
- bodyParameters.put("telecomNumber", telecomNumber);
-
- orderItemShipGroup =
EntityUtil.getFirst(delegator.findByAnd("OrderItemShipGroup",
UtilMisc.toMap("orderId", orderId)));
- bodyParameters.put("orderItemShipGroup",
orderItemShipGroup);
- Set correspondingPoIdSet = FastSet.newInstance();
-
- List orderItems = orderReadHelper.getOrderItems();
- Iterator oiIter = orderItems.iterator();
- while (oiIter.hasNext()) {
- GenericValue orderItem = (GenericValue) oiIter.next();
- String correspondingPoId =
orderItem.getString("correspondingPoId");
- if (correspondingPoId != null) {
- correspondingPoIdSet.add(correspondingPoId);
- }
- }
- bodyParameters.put("correspondingPoIdSet",
correspondingPoIdSet);
- if (orderHeader.get("externalId") != null) {
- Set externalIdSet = FastSet.newInstance();
- externalIdSet.add(orderHeader.getString("externalId"));
- bodyParameters.put("externalIdSet", externalIdSet);
- }
- // Check if order was a return replacement order
(associated with return)
- GenericValue returnItemResponse =
EntityUtil.getFirst(delegator.findByAnd("ReturnItemResponse",
UtilMisc.toMap("replacementOrderId", orderId)));
- if (returnItemResponse != null) {
- boolean includeReturnLabel = false;
-
- // Get the associated return Id (replaceReturnId)
- String returnItemResponseId =
returnItemResponse.getString("returnItemResponseId");
- List returnItemList =
delegator.findByAnd("ReturnItem", UtilMisc.toMap("returnItemResponseId",
returnItemResponseId));
- GenericValue firstReturnItem =
EntityUtil.getFirst(returnItemList);
- if (firstReturnItem != null) {
- bodyParameters.put("replacementReturnId",
firstReturnItem.getString("returnId"));
- } else {
- Debug.logWarning("Could not find a ReturnItem for
returnItemResponseId [" + returnItemResponseId + "]; this really shouldn't
happen but isn't a real error either. It means a ReturnItemResponse was created
but not attached to any item!", module);
- }
+ // prepare map to Create Oagis Message Info
+ try {
+ Map comiCtx = FastMap.newInstance();
+ comiCtx.putAll(omiPkMap);
+ comiCtx.put("processingStatusId", "OAGMP_TRIGGERED");
+ comiCtx.put("outgoingMessage", "Y");
+ comiCtx.put("confirmation", "1");
+ comiCtx.put("bsrVerb", "PROCESS");
+ comiCtx.put("bsrNoun", "SHIPMENT");
+ comiCtx.put("bsrRevision", "001");
+ comiCtx.put("orderId", orderId);
+ comiCtx.put("sentDate", timestamp);
+ comiCtx.put("authId", authId);
+ comiCtx.put("userLogin", userLogin);
+ dispatcher.runSync("createOagisMessageInfo", comiCtx, 60,
true);
+ } catch (GenericServiceException e) {
+ String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
+ Debug.logError(e, errMsg, module);
+ }
+ if (Debug.infoOn()) Debug.logInfo("Saved OagisMessageInfo for
oagisSendProcessShipment message for orderId [" + orderId + "]", module);
- // return label should only be sent when we want a
return label to be included; this would be for a cross-ship replacement type
ReturnItem
-
- // go through the returnItemList and if any are
cross-ship replacement, then include a label (not for wait replacement in other
words)
- Iterator returnItemIter = returnItemList.iterator();
- while (returnItemIter.hasNext()) {
- GenericValue returnItem = (GenericValue)
returnItemIter.next();
- if
("RTN_CSREPLACE".equals(returnItem.getString("returnTypeId"))) {
- includeReturnLabel = true;
- }
- }
-
- if (includeReturnLabel) {
- bodyParameters.put("shipnotes", "RETURNLABEL");
- }
-
- }
- // tracking shipper account, other Party info
- String partyId = shipment.getString("partyIdTo");
- bodyParameters.put("partyNameView",
delegator.findByPrimaryKey("PartyNameView", UtilMisc.toMap("partyId",
partyId)));
- List 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);
- }
- }
- }
-
- bodyParameters.put("shipmentId", shipmentId);
- bodyParameters.put("orderId", orderId);
- bodyParameters.put("userLogin", userLogin);
-
- String bodyScreenUri =
UtilProperties.getPropertyValue("oagis.properties",
"Oagis.Template.ProcessShipment");
- String outText = null;
- Writer writer = new StringWriter();
- ScreenRenderer screens = new ScreenRenderer(writer,
bodyParameters, htmlScreenRenderer);
- screens.render(bodyScreenUri);
- writer.close();
- outText = writer.toString();
- if (Debug.infoOn()) Debug.logInfo("Finished rendering
oagisSendProcessShipment message for orderId [" + orderId + "]", module);
-
- try {
- Map uomiCtx = FastMap.newInstance();
- uomiCtx.putAll(omiPkMap);
- uomiCtx.put("processingStatusId",
"OAGMP_OGEN_SUCCESS");
- uomiCtx.put("shipmentId", shipmentId);
- uomiCtx.put("userLogin", userLogin);
- if (OagisServices.debugSaveXmlOut) {
- uomiCtx.put("fullMessageXml", outText);
- }
- dispatcher.runSync("updateOagisMessageInfo", uomiCtx,
60, true);
- } catch (GenericServiceException e) {
- String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
- Debug.logError(e, errMsg, module);
- }
-
- Map sendMessageReturn =
OagisServices.sendMessageText(outText, out, sendToUrl, saveToDirectory,
saveToFilename);
+ // check to see if there is already a Shipment for this order
+ EntityCondition findShipmentCondition = new
EntityConditionList(UtilMisc.toList(
+ new EntityExpr("primaryOrderId", EntityOperator.EQUALS,
orderId),
+ new EntityExpr("statusId", EntityOperator.NOT_EQUAL,
"SHIPMENT_CANCELLED")
+ ), EntityOperator.AND);
+ List shipmentList = delegator.findByCondition("Shipment",
findShipmentCondition, null, null);
+ GenericValue shipment = EntityUtil.getFirst(shipmentList);
+
+ if (shipment != null) {
+ // if picked, packed, shipped, delivered then complain, no
reason to process the shipment!
+ String statusId = shipment.getString("statusId");
+ if ("SHIPMENT_PICKED".equals(statusId) ||
"SHIPMENT_PACKED".equals(statusId) || "SHIPMENT_SHIPPED".equals(statusId) ||
"SHIPMENT_DELIVERED".equals(statusId)) {
+ return ServiceUtil.returnError("Not sending Process
Shipment message because found Shipment that is already being processed, is in
status [" + statusId + "]");
+ }
+ shipmentId = shipment.getString("shipmentId");
+ } else {
+ Map cospResult= dispatcher.runSync("createOrderShipmentPlan",
UtilMisc.toMap("orderId", orderId, "userLogin", userLogin));
+ shipmentId = (String) cospResult.get("shipmentId");
+ shipment = delegator.findByPrimaryKey("Shipment",
UtilMisc.toMap("shipmentId", shipmentId));
+ }
+
+ bodyParameters.put("shipment", shipment);
+ List shipmentItems = delegator.findByAnd("ShipmentItem",
UtilMisc.toMap("shipmentId", shipmentId));
+ bodyParameters.put("shipmentItems", shipmentItems);
+
+ 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));
+ if (telecomNumber == null) {
+ return ServiceUtil.returnError("In Send ProcessShipment
Telecom number not found for orderId [" + orderId + "]");
+ }
+ bodyParameters.put("telecomNumber", telecomNumber);
+
+ orderItemShipGroup =
EntityUtil.getFirst(delegator.findByAnd("OrderItemShipGroup",
UtilMisc.toMap("orderId", orderId)));
+ bodyParameters.put("orderItemShipGroup", orderItemShipGroup);
+ Set correspondingPoIdSet = FastSet.newInstance();
+
+ List orderItems = orderReadHelper.getOrderItems();
+ Iterator oiIter = orderItems.iterator();
+ while (oiIter.hasNext()) {
+ GenericValue orderItem = (GenericValue) oiIter.next();
+ String correspondingPoId =
orderItem.getString("correspondingPoId");
+ if (correspondingPoId != null) {
+ correspondingPoIdSet.add(correspondingPoId);
+ }
+ }
+ bodyParameters.put("correspondingPoIdSet", correspondingPoIdSet);
+ if (orderHeader.get("externalId") != null) {
+ Set externalIdSet = FastSet.newInstance();
+ externalIdSet.add(orderHeader.getString("externalId"));
+ bodyParameters.put("externalIdSet", externalIdSet);
+ }
+ // Check if order was a return replacement order (associated with
return)
+ GenericValue returnItemResponse =
EntityUtil.getFirst(delegator.findByAnd("ReturnItemResponse",
UtilMisc.toMap("replacementOrderId", orderId)));
+ if (returnItemResponse != null) {
+ boolean includeReturnLabel = false;
+
+ // Get the associated return Id (replaceReturnId)
+ String returnItemResponseId =
returnItemResponse.getString("returnItemResponseId");
+ List returnItemList = delegator.findByAnd("ReturnItem",
UtilMisc.toMap("returnItemResponseId", returnItemResponseId));
+ GenericValue firstReturnItem =
EntityUtil.getFirst(returnItemList);
+ if (firstReturnItem != null) {
+ bodyParameters.put("replacementReturnId",
firstReturnItem.getString("returnId"));
+ } else {
+ Debug.logWarning("Could not find a ReturnItem for
returnItemResponseId [" + returnItemResponseId + "]; this really shouldn't
happen but isn't a real error either. It means a ReturnItemResponse was created
but not attached to any item!", module);
+ }
- if (Debug.infoOn()) Debug.logInfo("Message send done for
oagisSendProcessShipment for orderId [" + orderId + "], sendToUrl=[" +
sendToUrl + "], saveToDirectory=[" + saveToDirectory + "], saveToFilename=[" +
saveToFilename + "]", module);
- try {
- Map uomiCtx = FastMap.newInstance();
- uomiCtx.putAll(omiPkMap);
- uomiCtx.put("processingStatusId", "OAGMP_SENT");
- uomiCtx.put("userLogin", userLogin);
- dispatcher.runSync("updateOagisMessageInfo", uomiCtx,
60, true);
- } catch (GenericServiceException e) {
- String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
- Debug.logError(e, errMsg, module);
+ // return label should only be sent when we want a return
label to be included; this would be for a cross-ship replacement type ReturnItem
+
+ // go through the returnItemList and if any are cross-ship
replacement, then include a label (not for wait replacement in other words)
+ Iterator returnItemIter = returnItemList.iterator();
+ while (returnItemIter.hasNext()) {
+ GenericValue returnItem = (GenericValue)
returnItemIter.next();
+ if
("RTN_CSREPLACE".equals(returnItem.getString("returnTypeId"))) {
+ includeReturnLabel = true;
}
-
- if (sendMessageReturn != null) {
- return sendMessageReturn;
+ }
+
+ if (includeReturnLabel) {
+ bodyParameters.put("shipnotes", "RETURNLABEL");
+ }
+
+ }
+ // tracking shipper account, other Party info
+ String partyId = shipment.getString("partyIdTo");
+ bodyParameters.put("partyNameView",
delegator.findByPrimaryKey("PartyNameView", UtilMisc.toMap("partyId",
partyId)));
+ List 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);
}
}
}
+
+ bodyParameters.put("shipmentId", shipmentId);
+ bodyParameters.put("orderId", orderId);
+ bodyParameters.put("userLogin", userLogin);
+
+ String bodyScreenUri =
UtilProperties.getPropertyValue("oagis.properties",
"Oagis.Template.ProcessShipment");
+ String outText = null;
+ Writer writer = new StringWriter();
+ ScreenRenderer screens = new ScreenRenderer(writer,
bodyParameters, htmlScreenRenderer);
+ screens.render(bodyScreenUri);
+ writer.close();
+ outText = writer.toString();
+ if (Debug.infoOn()) Debug.logInfo("Finished rendering
oagisSendProcessShipment message for orderId [" + orderId + "]", module);
+
+ try {
+ Map uomiCtx = FastMap.newInstance();
+ uomiCtx.putAll(omiPkMap);
+ uomiCtx.put("processingStatusId", "OAGMP_OGEN_SUCCESS");
+ uomiCtx.put("shipmentId", shipmentId);
+ uomiCtx.put("userLogin", userLogin);
+ if (OagisServices.debugSaveXmlOut) {
+ uomiCtx.put("fullMessageXml", outText);
+ }
+ dispatcher.runSync("updateOagisMessageInfo", uomiCtx, 60,
true);
+ } catch (GenericServiceException e) {
+ String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
+ Debug.logError(e, errMsg, module);
+ }
+
+ Map sendMessageReturn = OagisServices.sendMessageText(outText,
out, sendToUrl, saveToDirectory, saveToFilename);
+
+ if (Debug.infoOn()) Debug.logInfo("Message send done for
oagisSendProcessShipment for orderId [" + orderId + "], sendToUrl=[" +
sendToUrl + "], saveToDirectory=[" + saveToDirectory + "], saveToFilename=[" +
saveToFilename + "]", module);
+ try {
+ Map uomiCtx = FastMap.newInstance();
+ uomiCtx.putAll(omiPkMap);
+ uomiCtx.put("processingStatusId", "OAGMP_SENT");
+ uomiCtx.put("userLogin", userLogin);
+ dispatcher.runSync("updateOagisMessageInfo", uomiCtx, 60,
true);
+ } catch (GenericServiceException e) {
+ String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
+ Debug.logError(e, errMsg, module);
+ }
+
+ if (sendMessageReturn != null) {
+ return sendMessageReturn;
+ }
} catch (Throwable t) {
String errMsg = "System Error doing Process Shipment message for
orderId [" + orderId + "] shipmentId [" + shipmentId + "] message [" + omiPkMap
+ "]: " + t.toString();
Debug.logError(t, errMsg, module);
@@ -955,6 +963,8 @@
Map uomiCtx = FastMap.newInstance();
uomiCtx.putAll(omiPkMap);
uomiCtx.put("processingStatusId", "OAGMP_SYS_ERROR");
+ uomiCtx.put("bsrVerb", "PROCESS");
+ uomiCtx.put("bsrNoun", "SHIPMENT");
uomiCtx.put("orderId", orderId);
uomiCtx.put("shipmentId", shipmentId);
uomiCtx.put("userLogin", userLogin);
@@ -1011,180 +1021,208 @@
Map result = ServiceUtil.returnSuccess();
MapStack bodyParameters = MapStack.create();
- GenericValue returnHeader = null;
+ String orderId = null;
+
+ String referenceId = null;
+ String task = "RMA"; // Actual value of task is "SHIPREQUEST" which is
more than 10 char, need this in the db so it will match Confirm BODs, etc
+ String component = "INVENTORY";
+ Map omiPkMap = null;
+
try {
- returnHeader = delegator.findByPrimaryKey("ReturnHeader",
UtilMisc.toMap("returnId", returnId));
- } catch (GenericEntityException e) {
- Debug.logError(e, module);
- }
- if (returnHeader != null) {
+ // see if there are any OagisMessageInfo for this order that are
in the OAGMP_OGEN_SUCCESS or OAGMP_SENT statuses, if so don't send again; these
need to be manually reviewed before resending to avoid accidental duplicate
messages
+ List previousOagisMessageInfoList =
delegator.findByAnd("OagisMessageInfo", UtilMisc.toMap("returnId", returnId,
"task", task, "component", component));
+ if (EntityUtil.filterByAnd(previousOagisMessageInfoList,
UtilMisc.toMap("processingStatusId", "OAGMP_OGEN_SUCCESS")).size() > 0) {
+ // this isn't really an error, just a failed constraint so
return success
+ String successMsg = "Found existing message info(s) in
OAGMP_OGEN_SUCCESS, so not sending Receive Delivery message for return [" +
returnId + "] existing message(s) are: " +
EntityUtil.filterByAnd(previousOagisMessageInfoList,
UtilMisc.toMap("processingStatusId", "OAGMP_OGEN_SUCCESS"));
+ return ServiceUtil.returnSuccess(successMsg);
+ }
+ if (EntityUtil.filterByAnd(previousOagisMessageInfoList,
UtilMisc.toMap("processingStatusId", "OAGMP_SENT")).size() > 0) {
+ // this isn't really an error, just a failed constraint so
return success
+ String successMsg = "Found existing message info(s) in
OAGMP_SENT status, so not sending Receive Delivery message for return [" +
returnId + "] existing message(s) are: " +
EntityUtil.filterByAnd(previousOagisMessageInfoList,
UtilMisc.toMap("processingStatusId", "OAGMP_SENT"));
+ return ServiceUtil.returnSuccess(successMsg);
+ }
+
+ GenericValue returnHeader =
delegator.findByPrimaryKey("ReturnHeader", UtilMisc.toMap("returnId",
returnId));
+ if (returnHeader == null) {
+ return ServiceUtil.returnError("Could not find Return with ID
[" + returnId + "]");
+ }
String statusId = returnHeader.getString("statusId");
- if ("RETURN_ACCEPTED".equals(statusId)) {
- Map comiCtx = FastMap.newInstance();
+ if (!"RETURN_ACCEPTED".equals(statusId)) {
+ return ServiceUtil.returnError("Return with ID [" + returnId +
"] no in accepted status (RETURN_ACCEPTED)");
+ }
+
+ List returnItems = delegator.findByAnd("ReturnItem",
UtilMisc.toMap("returnId", returnId));
+ bodyParameters.put("returnItems", returnItems);
+
+ orderId = EntityUtil.getFirst(returnItems).getString("orderId");
+
+ String logicalId =
UtilProperties.getPropertyValue("oagis.properties",
"CNTROLAREA.SENDER.LOGICALID");
+ String authId =
UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.AUTHID");
- String logicalId =
UtilProperties.getPropertyValue("oagis.properties",
"CNTROLAREA.SENDER.LOGICALID");
- bodyParameters.put("logicalId", logicalId);
- comiCtx.put("logicalId", logicalId);
-
- String authId =
UtilProperties.getPropertyValue("oagis.properties", "CNTROLAREA.SENDER.AUTHID");
- bodyParameters.put("authId", authId);
- comiCtx.put("authId", authId);
-
- String referenceId =
delegator.getNextSeqId("OagisMessageInfo");
- bodyParameters.put("referenceId", referenceId);
- comiCtx.put("referenceId", referenceId);
-
- Timestamp nowTimestamp = UtilDateTime.nowTimestamp();
- String sentDate =
OagisServices.isoDateFormat.format(nowTimestamp);
- bodyParameters.put("sentDate", sentDate);
-
- // prepare map to Create Oagis Message Info
- comiCtx.put("component", "INVENTORY");
- comiCtx.put("task", "RMA");
+ referenceId = delegator.getNextSeqId("OagisMessageInfo");
+ omiPkMap = UtilMisc.toMap("logicalId", logicalId, "component",
component, "task", task, "referenceId", referenceId);
+
+ Timestamp nowTimestamp = UtilDateTime.nowTimestamp();
+ String sentDate = OagisServices.isoDateFormat.format(nowTimestamp);
+
+ bodyParameters.putAll(omiPkMap);
+ bodyParameters.put("authId", authId);
+ bodyParameters.put("sentDate", sentDate);
+
+ // prepare map to Create Oagis Message Info
+ try {
+ Map comiCtx = FastMap.newInstance();
+ comiCtx.putAll(omiPkMap);
comiCtx.put("outgoingMessage", "Y");
comiCtx.put("confirmation", "1");
comiCtx.put("bsrVerb", "RECEIVE");
comiCtx.put("bsrNoun", "DELIVERY");
comiCtx.put("bsrRevision", "001");
comiCtx.put("returnId", returnId);
+ comiCtx.put("orderId", orderId);
+ comiCtx.put("authId", authId);
comiCtx.put("sentDate", nowTimestamp);
- comiCtx.put("userLogin", userLogin);
comiCtx.put("processingStatusId", "OAGMP_TRIGGERED");
- try {
- dispatcher.runSync("createOagisMessageInfo", comiCtx, 60,
true);
- } catch (GenericServiceException e) {
- String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
- Debug.logError(e, errMsg, module);
- }
-
- List returnItems = null;
- try {
- returnItems = delegator.findByAnd("ReturnItem",
UtilMisc.toMap("returnId", returnId));
- bodyParameters.put("returnItems", returnItems);
- } catch (GenericEntityException e) {
- Debug.logError(e, module);
- }
- GenericValue orderHeader = null;
- String orderId = null;
- try {
- orderId =
EntityUtil.getFirst(returnItems).getString("orderId");
- orderHeader = delegator.findByPrimaryKey("OrderHeader",
UtilMisc.toMap("orderId", orderId));
- if (orderHeader == null) {
- return ServiceUtil.returnError("No valid Order with ["
+ orderId + "] found, cannot process Return");
- }
- } catch (GenericEntityException e) {
- String errMsg = "Cannot process Return: " + e.toString();
- Debug.logError(e, errMsg, module);
- return ServiceUtil.returnError(errMsg);
- }
-
- String partyId = returnHeader.getString("fromPartyId");
+ comiCtx.put("userLogin", userLogin);
+ dispatcher.runSync("createOagisMessageInfo", comiCtx, 60,
true);
+ } catch (GenericServiceException e) {
+ String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
+ Debug.logError(e, errMsg, module);
+ }
- try {
- GenericValue postalAddress =
delegator.findByPrimaryKey("PostalAddress", UtilMisc.toMap("contactMechId",
returnHeader.getString("originContactMechId")));
- bodyParameters.put("postalAddress", postalAddress);
- bodyParameters.put("partyNameView",
delegator.findByPrimaryKey("PartyNameView", UtilMisc.toMap("partyId",
partyId)));
- } catch (GenericEntityException e) {
- Debug.logError(e, module);
- }
-
- // calculate total qty of return items in a shipping unit
received, order associated with return
- double totalQty = 0.0;
- Map serialNumberListByReturnItemSeqIdMap =
FastMap.newInstance();
- bodyParameters.put("serialNumberListByReturnItemSeqIdMap",
serialNumberListByReturnItemSeqIdMap);
- Iterator riIter = returnItems.iterator();
- while (riIter.hasNext()) {
- GenericValue returnItem = (GenericValue) riIter.next();
- double itemQty =
returnItem.getDouble("returnQuantity").doubleValue();
- totalQty += itemQty;
-
- // for each ReturnItem also get serial numbers using
ItemIssuanceAndInventoryItem
- // NOTE: technically if the ReturnItem.quantity !=
OrderItem.quantity then we don't know which serial number is being returned, so
rather than guessing we will send it only in that case
- try {
- GenericValue orderItem =
returnItem.getRelatedOne("OrderItem");
- if (orderItem != null) {
- if (orderItem.getDouble("quantity").doubleValue()
== itemQty) {
- List itemIssuanceAndInventoryItemList =
delegator.findByAnd("ItemIssuanceAndInventoryItem",
- UtilMisc.toMap("orderId",
orderItem.get("orderId"), "orderItemSeqId", orderItem.get("orderItemSeqId"),
- "inventoryItemTypeId",
"SERIALIZED_INV_ITEM"));
- if (itemIssuanceAndInventoryItemList.size() ==
itemQty) {
- List serialNumberList =
FastList.newInstance();
-
serialNumberListByReturnItemSeqIdMap.put(returnItem.get("returnItemSeqId"),
serialNumberList);
- Iterator itemIssuanceAndInventoryItemIter
= itemIssuanceAndInventoryItemList.iterator();
- while
(itemIssuanceAndInventoryItemIter.hasNext()) {
- GenericValue
itemIssuanceAndInventoryItem = (GenericValue)
itemIssuanceAndInventoryItemIter.next();
-
serialNumberList.add(itemIssuanceAndInventoryItem.get("serialNumber"));
- }
- } else {
- // TODO: again a quantity mismatch,
whatever to do?
- // just logging this as info because the
product may not be serialized or have serialized inventory
- Debug.logInfo("Number of serial numbers ["
+ itemIssuanceAndInventoryItemList.size() + "] did not match quantity [" +
itemQty + "] for return item: " + returnItem.getPrimaryKey() + "; may not be a
serialized inventory product", module);
- }
- } else {
- // TODO: we don't know which serial numbers
are returned, should we throw an error? probably not, just do what we can
- Debug.logWarning("Could not get matching
serial numbers because order item quantity [" + orderItem.getDouble("quantity")
+ "] did not match quantity [" + itemQty + "] for return item: " +
returnItem.getPrimaryKey(), module);
+ GenericValue orderHeader =
delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId));
+ if (orderHeader == null) {
+ return ServiceUtil.returnError("No valid Order with [" +
orderId + "] found, cannot process Return");
+ }
+
+ String partyId = returnHeader.getString("fromPartyId");
+ GenericValue postalAddress =
delegator.findByPrimaryKey("PostalAddress", UtilMisc.toMap("contactMechId",
returnHeader.getString("originContactMechId")));
+ bodyParameters.put("postalAddress", postalAddress);
+ bodyParameters.put("partyNameView",
delegator.findByPrimaryKey("PartyNameView", UtilMisc.toMap("partyId",
partyId)));
+
+ // calculate total qty of return items in a shipping unit
received, order associated with return
+ double totalQty = 0.0;
+ Map serialNumberListByReturnItemSeqIdMap = FastMap.newInstance();
+ bodyParameters.put("serialNumberListByReturnItemSeqIdMap",
serialNumberListByReturnItemSeqIdMap);
+ Iterator riIter = returnItems.iterator();
+ while (riIter.hasNext()) {
+ GenericValue returnItem = (GenericValue) riIter.next();
+ double itemQty =
returnItem.getDouble("returnQuantity").doubleValue();
+ totalQty += itemQty;
+
+ // for each ReturnItem also get serial numbers using
ItemIssuanceAndInventoryItem
+ // NOTE: technically if the ReturnItem.quantity !=
OrderItem.quantity then we don't know which serial number is being returned, so
rather than guessing we will send it only in that case
+ GenericValue orderItem = returnItem.getRelatedOne("OrderItem");
+ if (orderItem != null) {
+ if (orderItem.getDouble("quantity").doubleValue() ==
itemQty) {
+ List itemIssuanceAndInventoryItemList =
delegator.findByAnd("ItemIssuanceAndInventoryItem",
+ UtilMisc.toMap("orderId",
orderItem.get("orderId"), "orderItemSeqId", orderItem.get("orderItemSeqId"),
+ "inventoryItemTypeId",
"SERIALIZED_INV_ITEM"));
+ if (itemIssuanceAndInventoryItemList.size() ==
itemQty) {
+ List serialNumberList = FastList.newInstance();
+
serialNumberListByReturnItemSeqIdMap.put(returnItem.get("returnItemSeqId"),
serialNumberList);
+ Iterator itemIssuanceAndInventoryItemIter =
itemIssuanceAndInventoryItemList.iterator();
+ while (itemIssuanceAndInventoryItemIter.hasNext())
{
+ GenericValue itemIssuanceAndInventoryItem =
(GenericValue) itemIssuanceAndInventoryItemIter.next();
+
serialNumberList.add(itemIssuanceAndInventoryItem.get("serialNumber"));
}
+ } else {
+ // TODO: again a quantity mismatch, whatever to do?
+ // just logging this as info because the product
may not be serialized or have serialized inventory
+ Debug.logInfo("Number of serial numbers [" +
itemIssuanceAndInventoryItemList.size() + "] did not match quantity [" +
itemQty + "] for return item: " + returnItem.getPrimaryKey() + "; may not be a
serialized inventory product", module);
}
- } catch (GenericEntityException e) {
- String errMsg = "Error getting data for processing
return message: " + e.toString();
- Debug.logError(e, errMsg, module);
- return ServiceUtil.returnError(errMsg);
+ } else {
+ // TODO: we don't know which serial numbers are
returned, should we throw an error? probably not, just do what we can
+ Debug.logWarning("Could not get matching serial
numbers because order item quantity [" + orderItem.getDouble("quantity") + "]
did not match quantity [" + itemQty + "] for return item: " +
returnItem.getPrimaryKey(), module);
}
}
- bodyParameters.put("totalQty", new Double(totalQty));
-
- String emailString =
PartyWorker.findPartyLatestContactMech(partyId, "EMAIL_ADDRESS",
delegator).getString("infoString");
- bodyParameters.put("emailString", emailString);
-
- GenericValue telecomNumber =
PartyWorker.findPartyLatestTelecomNumber(partyId, delegator);
- bodyParameters.put("telecomNumber", telecomNumber);
+ }
+ bodyParameters.put("totalQty", new Double(totalQty));
+
+ String emailString =
PartyWorker.findPartyLatestContactMech(partyId, "EMAIL_ADDRESS",
delegator).getString("infoString");
+ bodyParameters.put("emailString", emailString);
- String entryDate =
OagisServices.isoDateFormat.format(returnHeader.getTimestamp("entryDate"));
- bodyParameters.put("entryDate", entryDate);
-
- bodyParameters.put("returnId", returnId);
+ GenericValue telecomNumber =
PartyWorker.findPartyLatestTelecomNumber(partyId, delegator);
+ bodyParameters.put("telecomNumber", telecomNumber);
- String bodyScreenUri =
UtilProperties.getPropertyValue("oagis.properties",
"Oagis.Template.ReceiveDelivery");
- String outText = null;
- try {
- Writer writer = new StringWriter();
- ScreenRenderer screens = new ScreenRenderer(writer,
bodyParameters, htmlScreenRenderer);
- screens.render(bodyScreenUri);
- writer.close();
- outText = writer.toString();
- } catch (Exception e) {
- String errMsg = "Error rendering message: " + e.toString();
- Debug.logError(e, errMsg, module);
- return ServiceUtil.returnError(errMsg);
- }
+ String entryDate =
OagisServices.isoDateFormat.format(returnHeader.getTimestamp("entryDate"));
+ bodyParameters.put("entryDate", entryDate);
+
+ bodyParameters.put("returnId", returnId);
- try {
- comiCtx.put("orderId", orderId);
- comiCtx.put("processingStatusId", "OAGMP_OGEN_SUCCESS");
- if (OagisServices.debugSaveXmlOut) {
- comiCtx.put("fullMessageXml", outText);
- }
- dispatcher.runSync("updateOagisMessageInfo", comiCtx, 60,
true);
- } catch (GenericServiceException e) {
- String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
- Debug.logError(e, errMsg, module);
+ String bodyScreenUri =
UtilProperties.getPropertyValue("oagis.properties",
"Oagis.Template.ReceiveDelivery");
+ Writer writer = new StringWriter();
+ ScreenRenderer screens = new ScreenRenderer(writer,
bodyParameters, htmlScreenRenderer);
+ screens.render(bodyScreenUri);
+ writer.close();
+ String outText = writer.toString();
+
+ try {
+ Map uomiCtx = FastMap.newInstance();
+ uomiCtx.putAll(omiPkMap);
+ uomiCtx.put("processingStatusId", "OAGMP_OGEN_SUCCESS");
+ uomiCtx.put("userLogin", userLogin);
+ if (OagisServices.debugSaveXmlOut) {
+ uomiCtx.put("fullMessageXml", outText);
}
+ dispatcher.runSync("updateOagisMessageInfo", uomiCtx, 60,
true);
+ } catch (GenericServiceException e) {
+ String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
+ Debug.logError(e, errMsg, module);
+ }
- Map sendMessageReturn = OagisServices.sendMessageText(outText,
out, sendToUrl, saveToDirectory, saveToFilename);
+ Map sendMessageReturn = OagisServices.sendMessageText(outText,
out, sendToUrl, saveToDirectory, saveToFilename);
+ try {
+ Map uomiCtx = FastMap.newInstance();
+ uomiCtx.putAll(omiPkMap);
+ uomiCtx.put("processingStatusId", "OAGMP_SENT");
+ uomiCtx.put("userLogin", userLogin);
+ dispatcher.runSync("updateOagisMessageInfo", uomiCtx, 60,
true);
+ } catch (GenericServiceException e) {
+ String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
+ Debug.logError(e, errMsg, module);
+ }
+
+ if (sendMessageReturn != null) {
+ return sendMessageReturn;
+ }
+ } catch (Throwable t) {
+ String errMsg = "System Error doing Receive Delivery message for
returnId [" + returnId + "] orderId [" + orderId + "] message [" + omiPkMap +
"]: " + t.toString();
+ Debug.logError(t, errMsg, module);
+
+ // if we have a referenceId and the omiPkMap not null, save the
error status
+ if (omiPkMap != null) {
try {
- comiCtx.put("processingStatusId", "OAGMP_SENT");
- dispatcher.runSync("updateOagisMessageInfo", comiCtx, 60,
true);
- } catch (GenericServiceException e) {
- String errMsg =
UtilProperties.getMessage(ServiceUtil.resource,
"OagisErrorInCreatingDataForOagisMessageInfoEntity", (Locale)
context.get("locale"));
- Debug.logError(e, errMsg, module);
- }
+ // only do this if there is a record already in place
+ if (delegator.findByPrimaryKey("OagisMessageInfo",
omiPkMap) == null) {
+ return ServiceUtil.returnError(errMsg);
+ }
+
+ Map uomiCtx = FastMap.newInstance();
+ uomiCtx.putAll(omiPkMap);
+ uomiCtx.put("processingStatusId", "OAGMP_SYS_ERROR");
+ uomiCtx.put("bsrVerb", "RECEIVE");
+ uomiCtx.put("bsrNoun", "DELIVERY");
+ uomiCtx.put("returnId", returnId);
+ uomiCtx.put("orderId", orderId);
+ uomiCtx.put("userLogin", userLogin);
+ dispatcher.runSync("updateOagisMessageInfo", uomiCtx, 60,
true);
- if (sendMessageReturn != null) {
- return sendMessageReturn;
+ List errorMapList =
UtilMisc.toList(UtilMisc.toMap("description", errMsg, "reasonCode",
"SystemError"));
+ Map saveErrorMapListCtx = FastMap.newInstance();
+ saveErrorMapListCtx.putAll(omiPkMap);
+ saveErrorMapListCtx.put("errorMapList", errorMapList);
+ saveErrorMapListCtx.put("userLogin", userLogin);
+ dispatcher.runSync("createOagisMsgErrInfosFromErrMapList",
saveErrorMapListCtx, 60, true);
+ } catch (GeneralException e) {
+ String errMsg2 = "Error saving message error info: " +
e.toString();
+ Debug.logError(e, errMsg2, module);
}
}
- }
+
+ return ServiceUtil.returnError(errMsg);
+ }
return result;
}
}