You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ak...@apache.org on 2020/08/03 12:06:57 UTC
[ofbiz-framework] branch trunk updated: Improved: Purchase Order
Email Support (OFBIZ-11864)
This is an automated email from the ASF dual-hosted git repository.
akashjain pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push:
new 68d210a Improved: Purchase Order Email Support (OFBIZ-11864)
68d210a is described below
commit 68d210a7d0bd60e25ec34c7b2a32890bea723d9b
Author: Akash Jain <ak...@hotwaxsystems.com>
AuthorDate: Mon Aug 3 17:29:13 2020 +0530
Improved: Purchase Order Email Support (OFBIZ-11864)
---
applications/order/data/OrderTypeData.xml | 4 ++-
applications/order/servicedef/services.xml | 7 ++++
.../apache/ofbiz/order/order/OrderServices.java | 40 ++++++++++++++++++++++
applications/order/template/order/OrderInfo.ftl | 10 ++++++
.../template/order/SendPurchaseOrderEmail.ftl | 31 +++++++++++++++++
.../order/webapp/ordermgr/WEB-INF/controller.xml | 6 ++++
.../order/widget/ordermgr/OrderHeaderScreens.xml | 18 ++++++++++
7 files changed, 115 insertions(+), 1 deletion(-)
diff --git a/applications/order/data/OrderTypeData.xml b/applications/order/data/OrderTypeData.xml
index 2638999..a68cb90 100644
--- a/applications/order/data/OrderTypeData.xml
+++ b/applications/order/data/OrderTypeData.xml
@@ -33,5 +33,7 @@ under the License.
<EmailTemplateSetting emailTemplateSettingId="CUST_REQ_NOTE_ADDED"
bodyScreenLocation="component://order/widget/ordermgr/CustRequestScreens.xml#AddNoteCustRequestNotification"
subject="OFBiz - A Note has been added to your request: '${custRequestName}' #CR${custRequestId}"/>
-
+ <EmailTemplateSetting emailTemplateSettingId="SEND_PO_EMAIL"
+ bodyScreenLocation="component://order/widget/ordermgr/OrderHeaderScreens.xml#SendPOEmail"
+ subject="Your Purchase Order #${orderId}"/>
</entity-engine-xml>
diff --git a/applications/order/servicedef/services.xml b/applications/order/servicedef/services.xml
index 76d5eb0..a974c0b 100644
--- a/applications/order/servicedef/services.xml
+++ b/applications/order/servicedef/services.xml
@@ -72,6 +72,13 @@ under the License.
<implements service="orderNotificationInterface"/>
</service>
+ <service name="sendPOEmail" engine="java" require-new-transaction="true" max-retry="3"
+ location="org.apache.ofbiz.order.order.OrderServices" invoke="sendPOEmail">
+ <description>Send Purchase Order Email</description>
+ <attribute name="orderId" type="String" mode="IN" optional="false"/>
+ <attribute name="emailTemplateSettingId" type="String" mode="IN" optional="true"/>
+ </service>
+
<service name="sendProcessNotification" engine="java" require-new-transaction="true" max-retry="3"
location="org.apache.ofbiz.order.order.OrderServices" invoke="sendProcessNotification">
<description>Limit Service for order processing workflow; sends activitiy notifications</description>
diff --git a/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java b/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java
index 400baf9..da143c4 100644
--- a/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java
+++ b/applications/order/src/main/java/org/apache/ofbiz/order/order/OrderServices.java
@@ -7399,4 +7399,44 @@ public class OrderServices {
}
return ServiceUtil.returnSuccess();
}
+
+ public static Map<String, Object> sendPOEmail(DispatchContext dctx, Map<String, ? extends Object> context) {
+ LocalDispatcher dispatcher = dctx.getDispatcher();
+ Delegator delegator = dctx.getDelegator();
+ GenericValue userLogin = (GenericValue) context.get("userLogin");
+ String orderId = (String) context.get("orderId");
+ String emailTemplateSettingId = (String) context.get("emailTemplateSettingId");
+
+ if (orderId != null && emailTemplateSettingId != null) {
+ try {
+ GenericValue orderHeader = EntityQuery.use(delegator).from("OrderHeader").where("orderId", orderId).queryOne();
+
+ if (orderHeader != null && "PURCHASE_ORDER".equals(orderHeader.getString("orderTypeId"))) {
+ GenericValue vendor = EntityQuery.use(delegator).from("OrderRole").where("orderId", orderId, "roleTypeId", "BILL_FROM_VENDOR").queryFirst();
+ if (vendor != null) {
+ String partyIdTo = vendor.getString("partyId");
+ GenericValue contactMech = PartyWorker.findPartyLatestContactMech(partyIdTo, "EMAIL_ADDRESS", delegator);
+ if (contactMech != null && contactMech.getString("infoString") != null) {
+ GenericValue emailTemplateSetting = EntityQuery.use(delegator).from("EmailTemplateSetting").where("emailTemplateSettingId", emailTemplateSettingId).queryOne();
+ if (emailTemplateSetting != null) {
+ String partyIdFrom = null;
+ GenericValue company = EntityQuery.use(delegator).from("OrderRole").where("orderId", orderId, "roleTypeId", "BILL_TO_CUSTOMER").queryFirst();
+ if (company != null) {
+ partyIdFrom = company.getString("partyId");
+ }
+ Map<String, Object> bodyParameters = UtilMisc.toMap("orderId", orderId, "partyIdTo", partyIdTo, "partyIdFrom", partyIdFrom);
+
+ Map<String, Object> emailCtx = UtilMisc.toMap("emailTemplateSettingId", emailTemplateSettingId, "sendTo", contactMech.getString("infoString"), "bodyParameters", bodyParameters);
+ emailCtx.put("userLogin", userLogin);
+ dispatcher.runAsync("sendMailFromTemplateSetting", emailCtx);
+ }
+ }
+ }
+ }
+ } catch (GenericEntityException | GenericServiceException e) {
+ Debug.logError(e, MODULE);
+ }
+ }
+ return ServiceUtil.returnSuccess();
+ }
}
diff --git a/applications/order/template/order/OrderInfo.ftl b/applications/order/template/order/OrderInfo.ftl
index 1e74f87..d091098 100644
--- a/applications/order/template/order/OrderInfo.ftl
+++ b/applications/order/template/order/OrderInfo.ftl
@@ -36,6 +36,16 @@ under the License.
</form>
</li>
</#if>
+
+ <#if "PURCHASE_ORDER" == orderHeader.orderTypeId && ("ORDER_REJECTED" != currentStatus.statusId || "ORDER_CANCELLED" != currentStatus.statusId)>
+ <li><a href="javascript:document.SendPOEmail.submit()">Send Email</a>
+ <form name="SendPOEmail" method="post" action="<@o...@ofbizUrl>">
+ <input type="hidden" name="orderId" value="${orderHeader.orderId!}"/>
+ <input type="hidden" name="emailTemplateSettingId" value="SEND_PO_EMAIL"/>
+ </form>
+ </li>
+ </#if>
+
<#if "ORDER_CREATED" == currentStatus.statusId || "ORDER_PROCESSING" == currentStatus.statusId>
<li><a href="javascript:document.OrderApproveOrder.submit()">${uiLabelMap.OrderApproveOrder}</a>
<form class ="basic-form" name="OrderApproveOrder" method="post" action="<@o...@ofbizUrl>">
diff --git a/applications/order/template/order/SendPurchaseOrderEmail.ftl b/applications/order/template/order/SendPurchaseOrderEmail.ftl
new file mode 100644
index 0000000..14724f2
--- /dev/null
+++ b/applications/order/template/order/SendPurchaseOrderEmail.ftl
@@ -0,0 +1,31 @@
+<#--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <title>${title}</title>
+ </head>
+ <body>
+ <p>Hello ${supplier.firstName!} ${supplier.lastName!} ${supplier.groupName!},</p>
+ <p>Here is your purchase order <a href="${StringUtil.wrapString(baseSecureUrl!)}/ordermgr/control/orderview?orderId=${orderId}">${orderId}</a></p>
+ <br />
+ Regards,<br />
+ ${company.groupName!}
+ </body>
+</html>
\ No newline at end of file
diff --git a/applications/order/webapp/ordermgr/WEB-INF/controller.xml b/applications/order/webapp/ordermgr/WEB-INF/controller.xml
index c1c4936..f8cc97a 100644
--- a/applications/order/webapp/ordermgr/WEB-INF/controller.xml
+++ b/applications/order/webapp/ordermgr/WEB-INF/controller.xml
@@ -90,6 +90,12 @@ under the License.
<security https="true" auth="true"/>
<response name="success" type="view" value="OrderHistory"/>
</request-map>
+ <request-map uri="sendPOEmail">
+ <security https="true" auth="true"/>
+ <event type="service" path="" invoke="sendPOEmail"/>
+ <response name="success" type="view" value="orderview"/>
+ <response name="error" type="view" value="orderview"/>
+ </request-map>
<!-- Order Manager Mass Change Requests -->
<request-map uri="massApproveOrders">
diff --git a/applications/order/widget/ordermgr/OrderHeaderScreens.xml b/applications/order/widget/ordermgr/OrderHeaderScreens.xml
index dd74147..4ba4fc5 100644
--- a/applications/order/widget/ordermgr/OrderHeaderScreens.xml
+++ b/applications/order/widget/ordermgr/OrderHeaderScreens.xml
@@ -91,4 +91,22 @@ under the License.
</widgets>
</section>
</screen>
+ <screen name="SendPOEmail">
+ <section>
+ <actions>
+ <entity-one entity-name="PartyNameView" value-field="supplier">
+ <field-map field-name="partyId" from-field="partyIdTo"/>
+ </entity-one>
+ <entity-one entity-name="PartyNameView" value-field="company">
+ <field-map field-name="partyId" from-field="partyIdFrom"/>
+ </entity-one>
+ <set field="title" value="Your Purchase Order #${orderId}"/>
+ </actions>
+ <widgets>
+ <platform-specific><html>
+ <html-template location="component://order/template/order/SendPurchaseOrderEmail.ftl"/>
+ </html></platform-specific>
+ </widgets>
+ </section>
+ </screen>
</screens>