Mike Phares b99b721458 Moved System.IO references from DMO classes to Static Helpers
Removed nugetSource from pipeline
Removed more comments
Created Static Classes for most DMO / Controller Classes
Push ConfigurationManager.AppSettings to controller
Align Tests with other Projects
2024-12-11 09:29:01 -07:00

524 lines
24 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Fab2ApprovalSystem.DMO;
using Fab2ApprovalSystem.Models;
using Fab2ApprovalSystem.ViewModels;
namespace Fab2ApprovalSystem.Misc;
public class ECNHelper {
private const string ECN_PREFIX = "ECN_";
private const string TECN_PREFIX = "TECN_";
private const string ETECN_PREFIX = "ETECN_";
public static bool IsITAR(ECN ecn) {
if (ecn.IsRH && !ecn.IsAU && !ecn.IsIndustrial && !ecn.IsMA) {
return true;
} else
return false;
}
public static string NotifyEmergencyTECNApproval(AppSettings appSettings, int ecnNumber, DateTime? expDate, ECN ecn) {
string emailSentList = "";
string senderName = "E-TECN";
string userEmail = string.Empty;
string subject = "E-TECN Approved";
string emailTemplate = "ETECNApproved.txt";
List<string> emailIst = MiscDMO.GetEmergencyTECNApprovalNotifyList(ecnNumber).Distinct().ToList();
string ecnFolderPath = appSettings.AttachmentFolder + "E-TECNZipped\\" + ETECN_PREFIX + ecnNumber.ToString() + ".zip";
subject = "E-TECN Approved notice for Number " + ecn.ECNNumber + ", - " + ecn.Title;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[5];
emailparams[0] = ecnNumber.ToString();
emailparams[1] = ecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = "E-TECN";
emailparams[4] = expDate is null ? string.Empty : expDate.Value.ToString();
if (IsITAR(ecn))
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, emailparams);
else
en.SendNotificationEmailWithAttachment(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, ecnFolderPath, emailparams);
emailSentList = string.Join(", ", emailIst.Distinct().ToArray());
return emailSentList;
}
public static string NotifyApproversForCancellation(AppSettings appSettings, int ecnNumber, byte currentStep, int documentType, string ecnTypeString, ECN ecn) {
string emailSentList = "";
string userEmail = string.Empty;
string senderName = ecnTypeString;
string emailTemplate = "TECNCancellationApproval.txt";
List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList();
string subject = ecnTypeString + " Cancellation Approval Required - " + ecnNumber + " for " + ecn.Title + ", Cancellation initiated on :" + ecn.CancellationDate;
foreach (string email in emailIst) {
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[4];
emailparams[0] = ecnNumber.ToString();
emailparams[1] = ecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = ecnTypeString;
userEmail = email;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
emailSentList += email + ",";
}
return emailSentList;
}
public static string NotifyApproversForRecall(AppSettings appSettings, int ecnNumber, byte currentStep, int documentType, string ecnTypeString, string recallComments, ECN ecn) {
string emailSentList = "";
List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList();
emailIst.Add("Jeanne.McIntyre@infineon.com");
emailIst.Add("Jonathan.Ouellette@infineon.com");
string emailTemplate = "ECNRecallApproval.txt";
string userEmail = string.Empty;
string subject = ecnTypeString + " Recalled - " + ecnNumber + " for " + ecn.Title + ", Recall initiated on :" + DateTime.Now.ToString();
string senderName = ecnTypeString;
foreach (string email in emailIst) {
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[5];
emailparams[0] = ecnNumber.ToString();
emailparams[1] = ecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = ecnTypeString;
emailparams[4] = recallComments;
userEmail = email;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
emailSentList += email + ",";
}
return emailSentList;
}
public static string NotifyApproversForExpiration(AppSettings appSettings, int ecnNumber, byte currentStep, int documentType, string ecnTypeString, ECN ecn) {
string emailSentList = "";
string userEmail = string.Empty;
string senderName = ecnTypeString;
string emailTemplate = "TECNExpirationApproval.txt";
List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList();
string subject = " TECN Expiration Approval Reqquired - " + ecnTypeString + "# " + ecnNumber + " for " + ecn.Title + ", Expired:" + ecn.ExpirationDate;
foreach (string email in emailIst) {
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[4];
emailparams[0] = ecnNumber.ToString();
emailparams[1] = ecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = ecnTypeString;
userEmail = email;
#if (DEBUG)
userEmail = GlobalVars.SENDER_EMAIL;
#endif
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
emailSentList += email + ",";
}
return emailSentList;
}
public static string NotifyTECNCancellation(AppSettings appSettings, UserAccountDMO userDMO, int ecnNumber, string ecnFolderPath, ECN ecn, List<int> notificationUserList) {
string emailSentList = "";
List<string> emailIst = MiscDMO.GetTECNCancelledApprovalNotifyList(ecnNumber).Distinct().ToList();
foreach (int userId in notificationUserList) {
string email = userDMO.GetUserEmailByID(userId);
if (email != null && !emailIst.Contains(email))
emailIst.Add(email);
}
string subject = string.Empty;
string userEmail = string.Empty;
string emailTemplate = "TECNCancelled.txt";
if (ecn.CancellationApprovalDate == null) {
subject = "TECN Cancellation Initiated Notice - " + ecnNumber + " for " + ecn.Title + ", Cancellation Initiated on:" + DateTime.Now;
} else {
subject = "TECN Cancellation Approved Notice - " + ecnNumber + " for " + ecn.Title + ", Cancelled:" + ecn.CancellationApprovalDate;
}
string senderName = "ECN";
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[5];
emailparams[0] = ecnNumber.ToString();
emailparams[1] = ecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = "TECN";
emailparams[4] = DateTime.Now.ToString();
#if (DEBUG)
userEmail = GlobalVars.SENDER_EMAIL;
#endif
if (IsITAR(ecn))
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, emailparams);
else
en.SendNotificationEmailWithAttachment(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, ecnFolderPath, emailparams);
emailSentList = string.Join(", ", emailIst.Distinct().ToArray());
return emailSentList;
}
public static string NotifyTECNAutoCancellation(AppSettings appSettings, int ecnNumber, int tecnNumber, List<string> attachments, ECN ecn) {
string emailSentList = "";
string senderName = "ECN";
string subject = string.Empty;
string userEmail = string.Empty;
string emailTemplate = "TECNAutoCancelled.txt";
List<string> emailIst = MiscDMO.GetTECNCancelledApprovalNotifyList(ecnNumber).Distinct().ToList();
subject = "TECN Conversion and Cancellation Notice - " + tecnNumber + " for " + ecn.Title + ", Converted on:" + DateTime.Now;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[6];
emailparams[0] = tecnNumber.ToString();
emailparams[1] = tecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = "TECN";
emailparams[4] = DateTime.Now.ToString();
emailparams[5] = ecnNumber.ToString();
#if (DEBUG)
userEmail = GlobalVars.SENDER_EMAIL;
#endif
if (IsITAR(ecn))
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, emailparams);
else
en.SendNotificationEmailWithAttachments(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, attachments, emailparams);
emailSentList = string.Join(", ", emailIst.Distinct().ToArray());
return emailSentList;
}
public static string NotifyTECNExpiration(AppSettings appSettings, int ecnNumber, string ecnFolderPath, ECN ecn) {
string emailSentList = "";
string senderName = "ECN";
string userEmail = string.Empty;
string emailTemplate = "TECNExpired.txt";
List<string> emailIst = MiscDMO.GetEmergencyTECNApprovalNotifyList(ecnNumber).Distinct().ToList();
string subject = "TECN Expiration Approved Notice - " + ecnNumber + " for " + ecn.Title + ", Expired:" + ecn.ExpirationDate;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[5];
emailparams[0] = ecnNumber.ToString();
emailparams[1] = ecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = "TECN";
emailparams[4] = ecn.ExpirationDate.Value.ToShortDateString();
if (IsITAR(ecn))
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, emailparams);
else
en.SendNotificationEmailWithAttachment(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, ecnFolderPath, emailparams);
emailSentList = string.Join(", ", emailIst.Distinct().ToArray());
return emailSentList;
}
public static void ReAssignApproval(AppSettings appSettings, int issueID, string ecnTypeString, string email, ECN ecn) {
string userEmail = string.Empty;
string senderName = ecnTypeString;
string emailTemplate = "ECNReAssigned.txt";
string subject = ecnTypeString + " Re-Assignment";
subject = ecnTypeString + " Re-Assignment" + " - Email would be sent to " + email + " for Number " + ecn.ECNNumber + ", - " + ecn.Title;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[4];
emailparams[0] = issueID.ToString();
emailparams[1] = issueID.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = ecnTypeString;
userEmail = email;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
}
public static string AddEECNApproval(AppSettings appSettings, int ecnNumber, string emailSentList, string emailArray, ECN ecn) {
string senderName = "E-TECN";
string userEmail = string.Empty;
string subject = "E-TECN Assignment";
string emailTemplate = "ECNAssigned.txt";
string[] emailIst = emailArray.Split(new char[] { '~' });
foreach (string email in emailIst) {
if (email.Length > 0) {
subject = "E-TECN Assignment notice for Number " + ecn.ECNNumber + ", - " + ecn.Title;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[4];
emailparams[0] = ecnNumber.ToString();
emailparams[1] = ecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = "E-TECN";
userEmail = email;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
emailSentList += email + ",";
}
}
return emailSentList;
}
public static string AddAdditionalApproval(AppSettings appSettings, int issueID, string ecnTypeString, string emailSentList, string emailArray, ECN ecn) {
string userEmail = string.Empty;
string senderName = ecnTypeString;
string emailTemplate = "ECNAssigned.txt";
string subject = ecnTypeString + " Assignment";
string[] emailIst = emailArray.Split(new char[] { '~' });
foreach (string email in emailIst) {
if (email.Length > 0) {
subject = ecnTypeString + "Assignment notice for Number " + ecn.ECNNumber + ", - " + ecn.Title;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[4];
emailparams[0] = issueID.ToString();
emailparams[1] = issueID.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = ecnTypeString;
userEmail = email;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
emailSentList += email + ",";
}
}
return emailSentList;
}
public static void ReAssignApproverByAdmin(AppSettings appSettings, int issueID, string ecnTypeString, string email, ECN ecn) {
string subject;
string userEmail = string.Empty;
string senderName = ecnTypeString;
string emailTemplate = "ECNReAssigned.txt";
subject = ecnTypeString + " Re-Assignment" + " - ECN #" + ecn.ECNNumber + ", - " + ecn.Title;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[4];
emailparams[0] = issueID.ToString();
emailparams[1] = issueID.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = ecnTypeString;
userEmail = email;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
}
public static string NotifyTECNExtensionRejectionToOrginator(AppSettings appSettings, int issueID, string ecnTypeString, List<string> emailIst, ECN ecn, string username) {
string userEmail = string.Empty;
string senderName = ecnTypeString;
string subject = ecnTypeString + " Rejection";
string emailTemplate = "TECNExtensionReject.txt";
foreach (string email in emailIst) {
subject = ecnTypeString + " Extension Rejection notice for Number " + ecn.ECNNumber + ", - " + ecn.Title;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[5];
emailparams[0] = issueID.ToString();
emailparams[1] = issueID.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = username;
emailparams[4] = ecnTypeString;
userEmail = email;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
}
return userEmail;
}
public static string NotifyRejectionToOrginator(AppSettings appSettings, int issueID, string ecnTypeString, string comments, List<string> emailIst, ECN ecn, string username) {
string userEmail = string.Empty;
string senderName = ecnTypeString;
string emailTemplate = "ECNReject.txt";
string subject = ecnTypeString + " Rejection";
foreach (string email in emailIst) {
subject = ecnTypeString + " Rejection notice for Number " + ecn.ECNNumber + ", - " + ecn.Title;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[6];
emailparams[0] = issueID.ToString();
emailparams[1] = issueID.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = username;
emailparams[4] = ecnTypeString;
emailparams[5] = comments;
userEmail = email;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
}
return userEmail;
}
public static string NotifyApprovers(AppSettings appSettings, int ecnNumber, string ecnTypeString, string emailSentList, ECN ecn, List<string> emailIst) {
string subject = string.Empty;
string userEmail = string.Empty;
string senderName = ecnTypeString;
string emailTemplate = "ECNAssigned.txt";
subject = ecnTypeString + " Assignment notice for Number " + ecn.ECNNumber + ", - " + ecn.Title;
foreach (string email in emailIst) {
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[4];
emailparams[0] = ecnNumber.ToString();
emailparams[1] = ecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = ecnTypeString;
userEmail = email;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
emailSentList += email + ",";
}
return emailSentList;
}
public static string NotifyAdmin(AppSettings appSettings, int ecnNumber, string ecnTypeString, ECN ecn, int id) {
string emailSentList;
string subject = string.Empty;
string userEmail = string.Empty;
string senderName = ecnTypeString;
string emailTemplate = "ECNApproved.txt";
string ecnCreatedByEmail = MiscDMO.GetEmail(id);
subject = ecnTypeString + " Approval notice for Number " + ecn.ECNNumber + ", - " + ecn.Title;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[4];
emailparams[0] = ecnNumber.ToString();
emailparams[1] = ecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = ecnTypeString;
userEmail = ecnCreatedByEmail;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
emailSentList = ecnCreatedByEmail;
return emailSentList;
}
public static string NotifySubmitter(AppSettings appSettings, int ecnNumber, string ecnTypeString, ECN ecn) {
string emailSentList;
string subject = string.Empty;
string userEmail = string.Empty;
string senderName = ecnTypeString;
int ecnCreatedById = ecn.OriginatorID;
string emailTemplate = "ECNApproved.txt";
string ecnCreatedByEmail = MiscDMO.GetEmail(ecnCreatedById);
subject = ecnTypeString + " Approval notice for Number " + ecn.ECNNumber + ", - " + ecn.Title;
EmailNotification en = new(appSettings, subject);
string[] emailparams = new string[4];
emailparams[0] = ecnNumber.ToString();
emailparams[1] = ecnNumber.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = ecnTypeString;
userEmail = ecnCreatedByEmail;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
emailSentList = ecnCreatedByEmail;
return emailSentList;
}
public static bool CreateZip(AppSettings appSettings, ECNPdf ecn, string UserId) {
try {
string sourceDirectory = appSettings.AttachmentFolder + "ECN\\" + ecn.ECNNumber.ToString() + "\\";
string outputFullFilePath = "";
string outputFileName;
if (ecn.IsTECN) {
if (ecn.ExtensionDate != null)
outputFileName = TECN_PREFIX + ecn.ECNNumber.ToString() + "_Extension.zip";
else
outputFileName = TECN_PREFIX + ecn.ECNNumber.ToString() + ".zip";
outputFullFilePath = appSettings.AttachmentFolder + "\\ECNZipped\\" + outputFileName;
} else if (ecn.IsEmergencyTECN) // Transfer it to different folder , coz documentum does not need to have a Workflow Item created for Emergency TECN
{
outputFileName = ETECN_PREFIX + ecn.ECNNumber.ToString() + ".zip";
outputFullFilePath = appSettings.AttachmentFolder + "\\E-TECNZipped\\" + outputFileName;
} else {
outputFileName = ECN_PREFIX + ecn.ECNNumber.ToString() + ".zip";
outputFullFilePath = appSettings.AttachmentFolder + "\\ECNZipped\\" + outputFileName;
}
Zipper zip = new();
zip.CreateZip(outputFullFilePath, sourceDirectory);
} catch (Exception ex) {
EventLogDMO.Add(new WinEventLog() { IssueID = ecn.ECNNumber, UserID = UserId, DocumentType = ecn.IsECN ? "ECN" : (ecn.IsEmergencyTECN ? "E-TECN" : "TECN"), OperationType = "Error", Comments = ex.Message });
return false;
}
return true;
}
public static string AddEECNApproval(AppSettings appSettings, string userId, WorkflowDMO wfDMO, int ecnNumber, out byte step, string engUserIDs, string OpUserIDs, ECN ecn) {
string emailSentList = "";
step = 1;
string emailArray = "";
try {
emailArray = wfDMO.AddEECNApproval(ecnNumber, step, (int)GlobalVars.DocumentType.EECN, engUserIDs, OpUserIDs);
} catch (Exception e) {
string detailedException = "";
try {
detailedException = e.InnerException.ToString();
} catch {
detailedException = e.Message;
}
string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " Step:" + step + " " + " Userid:" + engUserIDs + " - " + OpUserIDs + " - " + e.Message.ToString().Substring(0, 250) : e.Message.ToString();
Functions.WriteEvent(appSettings, userId + "\r\n AddEECNApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error);
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = userId, DocumentType = "E-TECN ", OperationType = "Error", Comments = "AddEECNApproval - " + exceptionString });
throw new Exception(e.Message);
}
emailSentList = AddEECNApproval(appSettings, ecnNumber, emailSentList, emailArray, ecn);
return emailSentList;
}
public static string AttachSave(AppSettings appSettings, ECN_DMO ecnDMO, int ecnNumber, string returnString, int userId, string fullFileName, Stream stream) {
// Some browsers send file names with full path.
// We are only interested in the file name.
var fileName = Path.GetFileName(fullFileName);
string ecnFolderPath = appSettings.AttachmentFolder + "ECN\\" + ecnNumber.ToString();
DirectoryInfo di = new(ecnFolderPath);
if (!di.Exists)
try {
di.Create();
} catch {
returnString = "Error creating ECN directory.";
}
if (returnString == "") {
var physicalPath = Path.Combine(ecnFolderPath, fileName);
if (!File.Exists(physicalPath)) {
using (FileStream fileStream = new(physicalPath, FileMode.Create, FileAccess.Write)) {
stream.CopyTo(fileStream);
}
ECNAttachment attach = new() {
ECNNumber = ecnNumber,
FileName = fileName,
UserID = userId,
};
if (File.Exists(physicalPath)) {
ecnDMO.InsertECNAttachment(attach);
} else {
returnString = "File was not uploaded to server.";
}
} else {
returnString = "Cannot have duplicate file names.";
}
}
return returnString;
}
}