You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ap...@apache.org on 2007/07/14 13:19:16 UTC

svn commit: r556264 - in /ofbiz/trunk/applications: ecommerce/config/ ecommerce/templates/email/ ecommerce/webapp/ecommerce/WEB-INF/actions/order/ ecommerce/widget/ order/servicedef/ order/src/org/ofbiz/order/order/ product/script/org/ofbiz/shipment/sh...

Author: apatel
Date: Sat Jul 14 04:19:11 2007
New Revision: 556264

URL: http://svn.apache.org/viewvc?view=rev&rev=556264
Log:
Improved Shipment notification email set up.

Modified:
    ofbiz/trunk/applications/ecommerce/config/EcommerceUiLabels.properties
    ofbiz/trunk/applications/ecommerce/templates/email/ShipmentNotificationEmail.ftl
    ofbiz/trunk/applications/ecommerce/webapp/ecommerce/WEB-INF/actions/order/shipmentstatus.bsh
    ofbiz/trunk/applications/ecommerce/widget/EmailOrderScreens.xml
    ofbiz/trunk/applications/order/servicedef/services.xml
    ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
    ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml
    ofbiz/trunk/applications/product/servicedef/secas_shipment.xml
    ofbiz/trunk/applications/product/servicedef/services_shipment.xml
    ofbiz/trunk/applications/product/src/org/ofbiz/shipment/shipment/ShipmentServices.java

Modified: ofbiz/trunk/applications/ecommerce/config/EcommerceUiLabels.properties
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/ecommerce/config/EcommerceUiLabels.properties?view=diff&rev=556264&r1=556263&r2=556264
==============================================================================
--- ofbiz/trunk/applications/ecommerce/config/EcommerceUiLabels.properties (original)
+++ ofbiz/trunk/applications/ecommerce/config/EcommerceUiLabels.properties Sat Jul 14 04:19:11 2007
@@ -268,7 +268,7 @@
 PageTitleSearchResults=Search Results
 PageTitleSearchSites=Search Sites
 PageTitleSentMessages=Sent Messages
-PageTitleOrderShipmentCompleteNotice=Shipment Complete Notice
+PageTitleShipmentCompleteNotice=Shipment Complete Notice
 PageTitleShippingInformation=Shipping Information
 PageTitleShippingOptions=Shipping Options
 PageTitleShoppingCart=Shopping Cart
@@ -454,4 +454,4 @@
 ProductUsuallyShipsIn=Usually ships in
 ProductYouSearchedFor=you searched for
 RequestHistory=Request History
-QuoteHistory=Quote History
\ No newline at end of file
+QuoteHistory=Quote History

Modified: ofbiz/trunk/applications/ecommerce/templates/email/ShipmentNotificationEmail.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/ecommerce/templates/email/ShipmentNotificationEmail.ftl?view=diff&rev=556264&r1=556263&r2=556264
==============================================================================
--- ofbiz/trunk/applications/ecommerce/templates/email/ShipmentNotificationEmail.ftl (original)
+++ ofbiz/trunk/applications/ecommerce/templates/email/ShipmentNotificationEmail.ftl Sat Jul 14 04:19:11 2007
@@ -17,48 +17,31 @@
 under the License.
 -->
 
-
-<table cellpadding="0" cellspacing="0" width="80%" border="0" class="boxoutside">
-   <tr>
-      <td colspan="3" class="tableheadtext">
-         This email is to inform you that your shipment has been completed.
-      </td>
-   </tr>   
-   <tr><td colspan="3">&nbsp;</td></tr>  
-   <#if orderItemShipGroups?has_content>
-   <tr>
-      <td colspan="3">
-         <h3>${uiLabelMap.OrderShippingInformation}</h3>
-      </td>
-   </tr>   
-   <#assign groupIdx = 0>
-   <#list orderItemShipGroups as shipGroup>
-      <#-- tracking number -->
-      <#if trackingNumber?has_content || orderShipmentInfoSummaryList?has_content>
-      <tr>
-         <td align="right" valign="top" width="15%" nowrap>
-            <div class="tabletext">&nbsp;<b>${uiLabelMap.OrderTrackingNumber}</b></div>
-         </td>
-         <td width="5">&nbsp;</td>
-         <td align="left" valign="top" width="80%">
-            <#-- TODO: add links to UPS/FEDEX/etc based on carrier partyId  -->
-            <#if shipGroup.trackingNumber?has_content>
-               <div class="tabletext">${shipGroup.trackingNumber}</div>
-            </#if>
-            <#if orderShipmentInfoSummaryList?has_content>
-               <#list orderShipmentInfoSummaryList as orderShipmentInfoSummary>
-                  <div class="tabletext">
-                     <#if (orderShipmentInfoSummaryList?size > 1)>${orderShipmentInfoSummary.shipmentPackageSeqId}: </#if>
-                        Code: ${orderShipmentInfoSummary.trackingCode?default("[Not Yet Known]")}
-                     <#if orderShipmentInfoSummary.boxNumber?has_content>${uiLabelMap.OrderBoxNubmer}${orderShipmentInfoSummary.boxNumber}</#if> 
-                     <#if orderShipmentInfoSummary.carrierPartyId?has_content>(${uiLabelMap.ProductCarrier}: ${orderShipmentInfoSummary.carrierPartyId})</#if>
-                  </div>
-               </#list>
-            </#if>
-         </td>
+<#if baseEcommerceSecureUrl?exists><#assign urlPrefix = baseEcommerceSecureUrl/></#if>
+<div class="screenlet">
+  <div class="screenlet-header">  
+     <div class="boxhead">&nbsp; ${uiLabelMap.ShippedItems}</div>
+  </div>   
+  <div class="screenlet-body">
+    <table width="100%" border="0" cellpadding="0">
+      <tr align="left" valign="bottom">
+        <td width="35%" align="left"><span class="tableheadtext"><b>${uiLabelMap.EcommerceProduct}</b></span></td>               
+        <td width="10%" align="right"><span class="tableheadtext"><b>${uiLabelMap.OrderQuantity}</b></span></td>
       </tr>
-      </#if>
-      <#assign groupIdx = groupIdx + 1>
-   </#list>
-   </#if>    
-</table>
\ No newline at end of file
+      <tr><td colspan="10"><hr class="sepbar"/></td></tr>
+      <#list shipmentPackages as shipmentPackage>
+        <#assign shipmentPackageContents = shipmentPackage.getRelated("ShipmentPackageContent")>
+        <#list shipmentPackageContents as shipmentPackageContent>
+          <#assign shipmentItem = shipmentPackageContent.getRelatedOne("ShipmentItem")>
+          <#assign productId = shipmentItem.productId>
+          <#assign product = shipmentItem.getRelatedOne("Product")>
+          <tr>
+            <td colspan="1" valign="top"> ${productId?if_exists} - ${product.internalName?if_exists}</td>   
+            <td align="right" valign="top"> ${shipmentItem.quantity?if_exists}</td>   
+          </tr>
+        </#list>
+        <tr><td colspan="10"><hr class="sepbar"/></td></tr>
+      </#list>
+    </table>
+  </div>
+</div>

Modified: ofbiz/trunk/applications/ecommerce/webapp/ecommerce/WEB-INF/actions/order/shipmentstatus.bsh
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/ecommerce/webapp/ecommerce/WEB-INF/actions/order/shipmentstatus.bsh?view=diff&rev=556264&r1=556263&r2=556264
==============================================================================
--- ofbiz/trunk/applications/ecommerce/webapp/ecommerce/WEB-INF/actions/order/shipmentstatus.bsh (original)
+++ ofbiz/trunk/applications/ecommerce/webapp/ecommerce/WEB-INF/actions/order/shipmentstatus.bsh Sat Jul 14 04:19:11 2007
@@ -17,28 +17,14 @@
  * under the License.
  */
 
-import org.ofbiz.base.util.*;
-import org.ofbiz.entity.*;
-import org.ofbiz.entity.condition.*;
-import org.ofbiz.entity.util.*;
-import org.ofbiz.order.order.OrderReadHelper;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.entity.GenericDelegator;
 
+shipmentId = parameters.get("shipmentId");
+if (shipmentId != null) {
+    shipment = delegator.findByPrimaryKey("Shipment", UtilMisc.toMap("shipmentId", shipmentId));
+    shipmentPackages = delegator.findByAnd("ShipmentPackage", UtilMisc.toMap("shipmentId", shipmentId));
 
-orderId = parameters.get("orderId");
-
-if(orderId != null) {
-    orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId));
-    orderReadHelper = new OrderReadHelper(orderHeader);
-    orderItemShipGroups = orderReadHelper.getOrderItemShipGroups();
-    context.put("orderItemShipGroups", orderItemShipGroups);
-    
-    osisCond = new EntityFieldMap(UtilMisc.toMap("orderId", orderId), EntityOperator.AND);
-    osisOrder = UtilMisc.toList("shipmentId", "shipmentRouteSegmentId", "shipmentPackageSeqId");
-    osisFields = UtilMisc.toList("shipmentId", "shipmentRouteSegmentId", "carrierPartyId", "shipmentMethodTypeId");
-    osisFields.add("shipmentPackageSeqId");
-    osisFields.add("trackingCode");
-    osisFields.add("boxNumber");
-    osisFindOptions = new EntityFindOptions(); osisFindOptions.setDistinct(true);
-    orderShipmentInfoSummaryList = delegator.findByCondition("OrderShipmentInfoSummary", osisCond, null, osisFields, osisOrder, osisFindOptions);
-    context.put("orderShipmentInfoSummaryList",orderShipmentInfoSummaryList);    
+    context.put("shipment", shipment);
+    context.put("shipmentPackages", shipmentPackages);
 }

Modified: ofbiz/trunk/applications/ecommerce/widget/EmailOrderScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/ecommerce/widget/EmailOrderScreens.xml?view=diff&rev=556264&r1=556263&r2=556264
==============================================================================
--- ofbiz/trunk/applications/ecommerce/widget/EmailOrderScreens.xml (original)
+++ ofbiz/trunk/applications/ecommerce/widget/EmailOrderScreens.xml Sat Jul 14 04:19:11 2007
@@ -149,7 +149,7 @@
     <screen name="ShipmentCompleteNotice">
         <section>
             <actions>
-                <set field="title" value="${uiLabelMap.PageTitleOrderShipmentCompleteNotice}"/>
+                <set field="title" value="${uiLabelMap.PageTitleShipmentCompleteNotice}"/>
                 <set field="baseEcommerceSecureUrl" value="${baseSecureUrl}/ecommerce/control/"/>
                 <script location="component://ecommerce/webapp/ecommerce/WEB-INF/actions/order/shipmentstatus.bsh"/>                
             </actions>

Modified: ofbiz/trunk/applications/order/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services.xml?view=diff&rev=556264&r1=556263&r2=556264
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/services.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/services.xml Sat Jul 14 04:19:11 2007
@@ -760,9 +760,4 @@
         <attribute name="orderListSize" type="Integer" mode="OUT" optional="false"/>
     </service>
     
-    <service name="sendShipCompleteNotification" engine="java" require-new-transaction="true" max-retry="3"
-            location="org.ofbiz.order.order.OrderServices" invoke="sendShipCompleteNotification">
-        <description>Send a Shipment complete notification</description>
-        <implements service="orderNotificationInterface"/>
-    </service>    
 </services>

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java?view=diff&rev=556264&r1=556263&r2=556264
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java Sat Jul 14 04:19:11 2007
@@ -2081,9 +2081,6 @@
         return sendOrderNotificationScreen(ctx, context, "PRDS_ODR_PAYRETRY");
     }
     
-    public static Map sendShipCompleteNotification(DispatchContext ctx, Map context) {
-        return sendOrderNotificationScreen(ctx, context, "PRDS_ODR_SHIP_COMPLT");
-    }
     protected static Map sendOrderNotificationScreen(DispatchContext dctx, Map context, String emailType) {
         LocalDispatcher dispatcher = dctx.getDispatcher();
         GenericDelegator delegator = dctx.getDelegator();

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=556264&r1=556263&r2=556264
==============================================================================
--- ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml (original)
+++ ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml Sat Jul 14 04:19:11 2007
@@ -229,7 +229,7 @@
         <set-nonpk-fields map-name="parameters" value-name="lookedUpValue"/>
         <now-timestamp-to-env env-name="lookedUpValue.lastModifiedDate"/>
         <set from-field="userLogin.userLoginId" field="lookedUpValue.lastModifiedByUserLogin"/>
-
+        <field-to-result field-name="lookedUpValue.shipmentId" result-name="shipmentId"/>
         <store-value value-name="lookedUpValue"/>
     </simple-method>
     <simple-method method-name="deleteShipment" short-description="Delete Shipment">
@@ -1323,7 +1323,6 @@
                     <!-- update the shipment status to shipped -->
                     <set from-field="shipment.shipmentId" field="packedContext.shipmentId"/>
                     <set value="SHIPMENT_SHIPPED" field="packedContext.statusId"/>
-                    <set field="packedContext.orderId" from-field="orderHeader.orderId"/>        
                     <call-service service-name="updateShipment" in-map-name="packedContext"/>
                   </then>
                   <else> <!-- PURCHASE_ORDER -->
@@ -1827,6 +1826,7 @@
         <remove-value value-name="lookedUpValue"/>
     </simple-method>
 -->
+
 
 
 

Modified: ofbiz/trunk/applications/product/servicedef/secas_shipment.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/secas_shipment.xml?view=diff&rev=556264&r1=556263&r2=556264
==============================================================================
--- ofbiz/trunk/applications/product/servicedef/secas_shipment.xml (original)
+++ ofbiz/trunk/applications/product/servicedef/secas_shipment.xml Sat Jul 14 04:19:11 2007
@@ -31,7 +31,7 @@
         <condition-field field-name="statusId" operator="not-equals" to-field-name="oldStatusId"/>
         <condition field-name="statusId" operator="equals" value="SHIPMENT_SHIPPED"/>
         <condition field-name="shipmentTypeId" operator="equals" value="SALES_SHIPMENT"/>
-        <action service="sendShipCompleteNotification" mode="async" persist="true"/>        
+        <action service="sendShipmentCompleteNotification" mode="async" persist="true"/>        
     </eca>
 
     <!-- if new statusId of a PURCHASE_SHIPMENT is PURCH_SHIP_RECEIVED, create invoice -->

Modified: ofbiz/trunk/applications/product/servicedef/services_shipment.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_shipment.xml?view=diff&rev=556264&r1=556263&r2=556264
==============================================================================
--- ofbiz/trunk/applications/product/servicedef/services_shipment.xml (original)
+++ ofbiz/trunk/applications/product/servicedef/services_shipment.xml Sat Jul 14 04:19:11 2007
@@ -123,7 +123,7 @@
     <service name="updateShipment" default-entity-name="Shipment" engine="simple"
             location="org/ofbiz/shipment/shipment/ShipmentServices.xml" invoke="updateShipment" auth="true">
         <description>Update Shipment</description>
-        <auto-attributes include="pk" mode="IN" optional="false"/>
+        <auto-attributes include="pk" mode="INOUT" optional="false"/>
         <auto-attributes include="nonpk" mode="IN" optional="true">
             <exclude field-name="shipmentTypeId"/>
             <exclude field-name="createdDate"/>
@@ -136,7 +136,6 @@
         <attribute name="oldPrimaryOrderId" type="String" mode="OUT" optional="true"/>
         <attribute name="oldOriginFacilityId" type="String" mode="OUT" optional="true"/>
         <attribute name="oldDestinationFacilityId" type="String" mode="OUT" optional="true"/>
-        <attribute name="orderId" type="String" mode="IN" optional="true"/>
     </service>
     <service name="deleteShipment" default-entity-name="Shipment" engine="simple"
             location="org/ofbiz/shipment/shipment/ShipmentServices.xml" invoke="deleteShipment" auth="true">
@@ -689,4 +688,14 @@
         <attribute name="originFacilityId" type="String" mode="IN" optional="true"/>
         <attribute name="quantityNotReserved" type="Double" mode="IN" optional="false"/>
     </service>
+
+    <service name="sendShipmentCompleteNotification" engine="java" require-new-transaction="true" max-retry="3"
+        location="org.ofbiz.shipment.shipment.ShipmentServices" invoke="sendShipmentCompleteNotification" auth="true">
+        <description>Send a notification on Shipment Complete</description>
+        <attribute name="shipmentId" type="String" mode="IN" optional="false"/>
+        <attribute name="sendTo" type="String" mode="IN" optional="true"/>
+        <attribute name="screenUri" type="String" mode="IN" optional="true"/>
+        <attribute name="comments" type="String" mode="IN" optional="true"/>
+        <attribute name="body" type="String" mode="OUT" optional="true"/>
+    </service>        
 </services>

Modified: ofbiz/trunk/applications/product/src/org/ofbiz/shipment/shipment/ShipmentServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/shipment/shipment/ShipmentServices.java?view=diff&rev=556264&r1=556263&r2=556264
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/shipment/shipment/ShipmentServices.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/shipment/shipment/ShipmentServices.java Sat Jul 14 04:19:11 2007
@@ -24,6 +24,7 @@
 import javolution.util.FastMap;
 
 import org.ofbiz.base.util.*;
+import org.ofbiz.base.util.collections.ResourceBundleMapWrapper;
 import org.ofbiz.common.geo.GeoWorker;
 import org.ofbiz.entity.GenericDelegator;
 import org.ofbiz.entity.GenericEntityException;
@@ -35,6 +36,7 @@
 import org.ofbiz.service.LocalDispatcher;
 import org.ofbiz.service.ModelService;
 import org.ofbiz.service.ServiceUtil;
+import org.ofbiz.party.party.PartyWorker;
 
 /**
  * ShipmentServices
@@ -44,6 +46,7 @@
     public static final String module = ShipmentServices.class.getName();
 
     public static final String resource = "ProductUiLabels";
+    public static final String resource_error = "OrderErrorUiLabels";
     public static final int decimals = UtilNumber.getBigDecimalScale("order.decimals");
     public static final int rounding = UtilNumber.getBigDecimalRoundingMode("order.rounding");
     public static final BigDecimal ZERO = (new BigDecimal("0")).setScale(decimals, rounding);    
@@ -1055,4 +1058,98 @@
         result.put("packageValue", packageTotalValue);
         return result;
     }
+    
+    public static Map sendShipmentCompleteNotification(DispatchContext dctx, Map context) {
+        LocalDispatcher dispatcher = dctx.getDispatcher();
+        GenericDelegator delegator = dctx.getDelegator();
+        GenericValue userLogin = (GenericValue) context.get("userLogin");
+        String shipmentId = (String) context.get("shipmentId");
+        String sendTo = (String) context.get("sendTo");
+        String screenUri = (String) context.get("screenUri");
+
+        // prepare the shipment information
+        Map sendMap = FastMap.newInstance();
+        GenericValue shipment = null ;
+        GenericValue orderHeader = null;
+        try {
+            shipment = delegator.findByPrimaryKey("Shipment", UtilMisc.toMap("shipmentId", shipmentId));
+            orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", shipment.getString("primaryOrderId")));
+        } catch (GenericEntityException e) {
+            Debug.logError(e, "Problem getting info from database", module);
+        }
+        GenericValue productStoreEmail = null;
+        try {
+            productStoreEmail = delegator.findByPrimaryKey("ProductStoreEmailSetting", UtilMisc.toMap("productStoreId", orderHeader.get("productStoreId"), "emailType", "PRDS_ODR_SHIP_COMPLT"));
+        } catch (GenericEntityException e) {
+            Debug.logError(e, "Problem getting the ProductStoreEmailSetting for productStoreId =" + orderHeader.get("productStoreId") + " and emailType = PRDS_ODR_SHIP_COMPLT", module);
+        }
+        if (productStoreEmail == null) {
+            return ServiceUtil.returnFailure("No valid email setting for store with productStoreId =" + orderHeader.get("productStoreId") + " and emailType = PRDS_ODR_SHIP_COMPLT");
+        }
+        // the override screenUri
+        if (UtilValidate.isEmpty(screenUri)) {
+            if (productStoreEmail != null) {
+                String bodyScreenLocation = productStoreEmail.getString("bodyScreenLocation");
+                sendMap.put("bodyScreenUri", bodyScreenLocation);
+            } else {
+                sendMap.put("bodyScreenUri", "component://ecommerce/widget/EmailOrderScreens.xml#ShipmentCompleteNotice");
+            }
+        } else {
+            sendMap.put("bodyScreenUri", screenUri);
+        }
+                
+        String partyId = shipment.getString("partyIdTo");
+
+        // get the email address
+        String emailString = null;
+        GenericValue email = PartyWorker.findPartyLatestContactMech(partyId, "EMAIL_ADDRESS", delegator);
+        if (UtilValidate.isNotEmpty(email)) {
+            emailString = email.getString("infoString");
+        }
+        if (UtilValidate.isEmpty(emailString)) {
+            return ServiceUtil.returnError("No sendTo email address found");
+        }
+
+        Locale locale = PartyWorker.findPartyLastLocale(partyId, delegator);
+        if (locale == null) {
+            locale = Locale.getDefault();
+        }
+        ResourceBundleMapWrapper uiLabelMap = (ResourceBundleMapWrapper) UtilProperties.getResourceBundleMap("EcommerceUiLabels", locale);
+        uiLabelMap.addBottomResourceBundle("OrderUiLabels");
+        uiLabelMap.addBottomResourceBundle("CommonUiLabels");
+                
+        Map bodyParameters = UtilMisc.toMap("partyId", partyId, "shipmentId", shipmentId, "orderId", shipment.getString("primaryOrderId"), "userLogin", userLogin, "uiLabelMap", uiLabelMap, "locale", locale);
+        sendMap.put("bodyParameters", bodyParameters);
+        sendMap.put("userLogin",userLogin);
+                
+        if (productStoreEmail != null) {
+            sendMap.put("subject", productStoreEmail.getString("subject"));
+            sendMap.put("contentType", productStoreEmail.get("contentType"));
+            sendMap.put("sendFrom", productStoreEmail.get("fromAddress"));
+            sendMap.put("sendCc", productStoreEmail.get("ccAddress"));
+            sendMap.put("sendBcc", productStoreEmail.get("bccAddress"));
+        } else {
+            sendMap.put("subject", "Shipment Complete Notification");
+            sendMap.put("contentType", "text/html");
+        }
+        if ((sendTo != null) && UtilValidate.isEmail(sendTo)) {
+            sendMap.put("sendTo", sendTo);
+        } else {
+            sendMap.put("sendTo", emailString);
+        }
+        // send the notification
+        Map sendResp = null;
+        try {
+            sendResp = dispatcher.runSync("sendMailFromScreen", sendMap);
+        } catch (Exception e) {
+            Debug.logError(e, "Problem sending mail", module);
+            return ServiceUtil.returnError(UtilProperties.getMessage(resource_error, "OrderProblemSendingEmail", locale));
+        }
+        // check for errors
+        if (sendResp != null && ServiceUtil.isError(sendResp)) {
+            sendResp.put("emailType", "PRDS_ODR_SHIP_COMPLT");
+            return ServiceUtil.returnError(UtilProperties.getMessage(resource_error, "OrderProblemSendingEmail", locale), null, null, sendResp);
+        }
+        return sendResp;
+    }    
 }