using System;
using System.Threading;
using CSLA.Security;
using Chilkat;
namespace GZTW.AyaNova.BLL
{
///
/// Process client notification list and
/// deliver appropriately
///
public class GenProcessClientNotifications
{
private GenProcessClientNotifications()
{
//
// TODO: Add constructor logic here
//
}
///
/// Compile a list of all pending Client notifications and deliver them
///
public static void DeliverNotifications()
{
//case 1904
if (!AyaBizUtils.GlobalSettings.UseNotification) return;
//case 1904 moved up here for early exit if nothing to process to avoid
//probing possibly not set up smtp server
ClientNotificationList nl = ClientNotificationList.GetList();
if (nl.Count == 0) return;
// Create a mailman object for sending email.
MailMan mailman = new MailMan();
mailman.UnlockComponent("SAyanovaMAILQ_46WCmUg3lQ1i");
// Set the SMTP variables
mailman.SmtpHost = GZTW.AyaNova.BLL.AyaBizUtils.GlobalSettings.NotifySMTPHostPortionOnly;
mailman.SmtpPort = GZTW.AyaNova.BLL.AyaBizUtils.GlobalSettings.NotifySMTPPort;
//case 1136
if (GZTW.AyaNova.BLL.AyaBizUtils.GlobalSettings.NotifySMTPUseSSL)
mailman.SmtpSsl = true;
if (GZTW.AyaNova.BLL.AyaBizUtils.GlobalSettings.NotifySMTPUseTLS)
mailman.StartTLS = true;
mailman.SmtpUsername = GZTW.AyaNova.BLL.AyaBizUtils.GlobalSettings.NotifySMTPAccount;
mailman.SmtpPassword = GZTW.AyaNova.BLL.AyaBizUtils.GlobalSettings.NotifySMTPPassword;
//case 1382
//if can't use smtp server then log and conditionally abort
if (!mailman.SmtpNoop())
{
//case 1608
NotifyDeliveryLog.LogSMTPConnectFailure("Code:" + mailman.LastSmtpStatus.ToString() + "\r\n" + mailman.LastErrorText);
//If retry then don't proceed or notifications will be deleted
if(AyaBizUtils.GlobalSettings.SMTPRetry)
return;
}
foreach (ClientNotificationList.ClientNotificationListInfo info in nl)
{
try
{
//reload email from stored mime
ClientNotifyEvent n = ClientNotifyEvent.GetItem(info.mID);
string[] sMessageFields = n.GetContentAsString.Split('|');
int nFieldCount = sMessageFields.GetLength(0);
if (nFieldCount < 5 || sMessageFields[0] != "CLIENTNOTIFYEVENT")
{
NotifyDeliveryLog.LogClientDelivery(n.ClientID, false, "Invalid event data: " + n.GetContentAsString);
ClientNotifyEvent.DeleteItem(n.ID);
continue;
}
Chilkat.Email email = new Chilkat.Email();
//email.SetFromMimeText(n.GetContentAsString);
email.Mailer = "AyaNova service management software licensed to " + AyaBizUtils.REGTO;
email.Body = sMessageFields[1];
email.Subject = sMessageFields[2];
//case 1601
string ToAddress = sMessageFields[3];
if (ToAddress.Contains(";")) ToAddress = ToAddress.Replace(";", ",");
if (ToAddress.Contains(","))
email.AddMultipleTo(ToAddress);
else
email.AddTo("", ToAddress);
email.From = sMessageFields[4];
if (nFieldCount > 5)
{
string sWOID = sMessageFields[5];
if (!string.IsNullOrEmpty(sWOID))
{
Guid woid = new Guid(sWOID);
//attach a workorder
Report r = Report.GetItem(new Guid(sMessageFields[6]));
object o = null;
if (r.ReportKey == "WorkorderServiceList")
o = WorkorderServiceList.GetListForSingleItem(woid);
else if (r.ReportKey == "WorkorderServiceDetailed")
o = WorkorderServiceDetailedReportData.GetItem(woid);
else if (r.ReportKey == "WorkorderQuoteList")
o = WorkorderQuoteList.GetListForSingleItem(woid);
else if (r.ReportKey == "WorkorderQuoteDetailed")
o = WorkorderQuoteDetailedReportData.GetItem(woid);
//ms.toarray = byte array from memory stream
email.AddDataAttachment(DateTime.Now.ToString("yyyy_MM_dd_HH_mm") + ".pdf", ReportGenerator.GetReportAsPDF(r, o).ToArray());
}
}
// Send mail.
bool success;
success = mailman.SendEmail(email);
if (success)
{
NotifyDeliveryLog.LogClientDelivery(n.ClientID,true,"");
ClientNotifyEvent.DeleteItem(n.ID);
}
else
{
NotifyDeliveryLog.LogClientDelivery(n.ClientID,false, mailman.LastErrorText);
//Added this late, I'm thinking if it fails they will get the log and
//be able to fix the problem easily but if it stays in the queue there will be no way
//for them to delete it
//A better way would be to delete after x failed deliveries
ClientNotifyEvent.DeleteItem(n.ID);
}
}
catch
{
}
}
}
//=================================
}
}