BPM to Email when a PO needs to be Approved – or has been approved or rejected
| BPM Type | Data |
| Table | POApvMsg |
| Name | EmailApprovalConfirm |



| Usings | None |
| References | None |
Code
// Email PO Approval Person – Confirmation
Erp.Tables.UserFile UserFile;
Erp.Tables.PurAgent PurAgent;
Erp.Tables.POHeader POHeader;
string emailCC = string.Empty;
string emailTo = string.Empty;
string emailFrom = string.Empty;
string msgFrom = string.Empty;
string msgTo = string.Empty;
string fromName = string.Empty;
string toName = string.Empty;
string appComments = string.Empty;
// ** find current PO Header **
var ttPOApvMsg_xRow = (from ttPOApvMsg_Row in ttPOApvMsg
where ttPOApvMsg_Row.ApproverResponse != “” && ttPOApvMsg_Row.ApproverResponse.Contains(“MANUALLY”) == false
select ttPOApvMsg_Row).FirstOrDefault();
if (ttPOApvMsg_xRow != null)
{
// ** Get PO Entry Person
POHeader = (from POHeader_Row in Db.POHeader
where string.Compare(POHeader_Row.Company, ttPOApvMsg_xRow.Company, true) == 0
&& POHeader_Row.PONum == ttPOApvMsg_xRow.PONum
select POHeader_Row).FirstOrDefault();
if (POHeader != null)
{
msgFrom = ttPOApvMsg_xRow.MsgFrom;
msgTo = ttPOApvMsg_xRow.MsgTo;
appComments = ttPOApvMsg_xRow.MsgText;
appComments = appComments.Replace(“\r”,”\r\n”);
// ** Get The Buyer Full Name For The Approval Requester
PurAgent = (from PurAgent_Row in Db.PurAgent
where string.Compare(PurAgent_Row.Company, ttPOApvMsg_xRow.Company, true) == 0
&& PurAgent_Row.BuyerID == msgFrom
select PurAgent_Row).FirstOrDefault();
if (PurAgent != null)
{
emailFrom = PurAgent.EMailAddress;
fromName = PurAgent.Name;
PurAgent = (from PurAgent_Row in Db.PurAgent
where string.Compare(PurAgent_Row.Company, ttPOApvMsg_xRow.Company, true) == 0
&& PurAgent_Row.BuyerID == msgTo
select PurAgent_Row).FirstOrDefault();
if (PurAgent != null)
{
emailTo = PurAgent.EMailAddress;
toName = PurAgent.Name;
UserFile = (from UserFile_Row in Db.UserFile
where UserFile_Row.DcdUserID == POHeader.EntryPerson
select UserFile_Row).FirstOrDefault();
if (UserFile != null)
{
emailCC = UserFile.EMailAddress;
if ((emailTo + emailCC) == “”)
{
throw new BLException(“No email addresses – cannot send email for: ” + ttPOApvMsg_xRow.ApproverResponse) ;
}
var mailer = this.GetMailer(async: true);
var message = new Ice.Mail.SmtpMail();
var from = “Epicor10Alerts@epicor.com“; // <<< Change this to an email address on your domain
message.SetFrom(from);
if (emailTo == “”)
{
emailTo = emailCC ;
emailCC = “” ;
}
var to = emailTo;
message.SetTo(to);
var cc = emailCC;
message.SetCC(cc);
var subjectBuilder = new System.Text.StringBuilder();
subjectBuilder.Append(“PO ” + ttPOApvMsg_xRow.PONum + ” has been ” + ttPOApvMsg_xRow.ApproverResponse);
var subject = subjectBuilder.ToString();
message.SetSubject(subject);
var bodyBuilder = new System.Text.StringBuilder();
bodyBuilder.Append(“PO ” + ttPOApvMsg_xRow.PONum + ” has been ” + ttPOApvMsg_xRow.ApproverResponse + ” by: ” + fromName + “.”);
if (ttPOApvMsg_xRow.ApproverResponse == “REJECTED”)
{
bodyBuilder.Append(“\r\n\r\nComments”);
bodyBuilder.Append(“\r\n—————————————————-“);
bodyBuilder.Append(“\r\n\r\n” + appComments);
}
var body = bodyBuilder.ToString();
message.SetBody(body);
mailer.Send(message);
}
}
}
}
}
| BPM Type | Data |
| Table | POApvMsg |
| Name | FurtherApprovalEmail |


Code
// Email PO Approval Person – Confirmation
Func<string, string> getUserMail = (userID) =>
{
var usr = Db.UserFile.Where(u=> u.DcdUserID == userID).FirstOrDefault();
if (usr == null)
return “” ;
return usr.EMailAddress ;
};
Func<string, string> getUserName = (userID) =>
{
var usr = Db.UserFile.Where(u=> u.DcdUserID == userID).FirstOrDefault();
if (usr == null)
return “” ;
return usr.Name ;
};
Erp.Tables.UserFile UserFile;
Erp.Tables.PurAgent PurAgent;
Erp.Tables.POHeader POHeader;
string emailCC = string.Empty;
string emailTo = string.Empty;
string emailFrom = string.Empty;
string msgFrom = string.Empty;
string msgTo = string.Empty;
string fromName = string.Empty;
string toName = string.Empty;
string appComments = string.Empty;
// ** find current PO Header **
var ttPOApvMsg_xRow = (from ttPOApvMsg_Row in ttPOApvMsg
where ttPOApvMsg_Row.ApproverResponse == “” && ttPOApvMsg_Row.RowMod == “U” && ttPOApvMsg_Row.MsgType == “1”
select ttPOApvMsg_Row).FirstOrDefault();
if (ttPOApvMsg_xRow != null)
{
msgFrom = Session.UserID ;
fromName = getUserName( msgFrom ) ;
emailFrom = getUserMail( msgFrom );
msgTo = ttPOApvMsg_xRow.MsgTo;
appComments = ttPOApvMsg_xRow.MsgText.Replace(“\r”,”\r\n”);
// ** Get PO Entry Person
POHeader = (from POHeader_Row in Db.POHeader
where POHeader_Row.Company == Session.CompanyID
&& POHeader_Row.PONum == ttPOApvMsg_xRow.PONum
select POHeader_Row).FirstOrDefault();
if (POHeader != null)
{
// ** Get The Buyer Full Name For The Approval Requester
PurAgent = (from PurAgent_Row in Db.PurAgent
where string.Compare(PurAgent_Row.Company, ttPOApvMsg_xRow.Company, true) == 0
&& PurAgent_Row.BuyerID == msgTo
select PurAgent_Row).FirstOrDefault();
if (PurAgent != null)
{
emailTo = PurAgent.EMailAddress;
toName = PurAgent.Name;
emailCC = getUserMail(POHeader.EntryPerson) ;
if ((emailTo + emailCC) == “”)
{
throw new BLException(“No email addresses – cannot send email for: ” + ttPOApvMsg_xRow.ApproverResponse ) ;
}
var mailer = this.GetMailer(async: true);
var message = new Ice.Mail.SmtpMail();
var from = “Epicor10Alerts@epicor.com“; // <<< Change this to an email address on your domain
message.SetFrom(from);
if (emailTo == “”)
{
emailTo = emailCC ;
emailCC = “” ;
}
var to = emailTo;
message.SetTo(to);
var cc = emailCC;
message.SetCC(cc);
var subjectBuilder = new System.Text.StringBuilder();
string response = ttPOApvMsg_xRow.ApproverResponse ;
if (response == “”)
response = “sent for approval to ” + toName ;
else
response += ” by ” + fromName ;
subjectBuilder.Append(“PO ” + ttPOApvMsg_xRow.PONum + ” has been ” + response);
var subject = subjectBuilder.ToString();
message.SetSubject(subject);
var bodyBuilder = new System.Text.StringBuilder();
bodyBuilder.Append(“PO ” + ttPOApvMsg_xRow.PONum + ” has been ” + response + “.”);
if (ttPOApvMsg_xRow.ApproverResponse == “REJECTED”)
{
bodyBuilder.Append(“\r\n\r\nComments”);
bodyBuilder.Append(“\r\n—————————————————-“);
bodyBuilder.Append(“\r\n\r\n” + appComments);
}
var body = bodyBuilder.ToString();
message.SetBody(body);
mailer.Send(message);
}
}
}
Happy Coding!



