From e020ec8c012fe009df1ab286364eaf0ace7f66d2 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Wed, 22 Jan 2025 09:30:59 -0700 Subject: [PATCH] Ready to publish Added new Email Template and new Modal form for expired TECNs. Updated Email Template and new Modal form for TECNs. Added more margin on all modal dialogs --- Fab2ApprovalSystem/Content/Site.css | 82 +++++++++++-------- .../Controllers/ECNController.cs | 40 ++++----- .../EmailTemplates/TECNCancelled.txt | 2 + .../EmailTemplates/TECNReturnedToProcess.txt | 17 ++++ Fab2ApprovalSystem/Fab2ApprovalSystem.csproj | 3 + Fab2ApprovalSystem/Misc/ECNHelper.cs | 24 +++--- .../Views/ECN/EditApproval.cshtml | 73 +++++++---------- .../Views/ECN/_ECNCancel.cshtml | 75 +++++++++++++++++ .../Views/ECN/_ECNReturnToProcess.cshtml | 75 +++++++++++++++++ 9 files changed, 284 insertions(+), 107 deletions(-) create mode 100644 Fab2ApprovalSystem/EmailTemplates/TECNReturnedToProcess.txt create mode 100644 Fab2ApprovalSystem/Views/ECN/_ECNCancel.cshtml create mode 100644 Fab2ApprovalSystem/Views/ECN/_ECNReturnToProcess.cshtml diff --git a/Fab2ApprovalSystem/Content/Site.css b/Fab2ApprovalSystem/Content/Site.css index a4cad63..7d1ad82 100644 --- a/Fab2ApprovalSystem/Content/Site.css +++ b/Fab2ApprovalSystem/Content/Site.css @@ -1,18 +1,19 @@ - /*vertical height between form-groups*/ - .my-form .form-group { - margin-bottom: 4px; +/*vertical height between form-groups*/ +.my-form .form-group { + margin-bottom: 4px; +} + +@media (min-width:768px) { + .my-form .row { + margin-left: -1px; + margin-right: -1px; } - @media (min-width:768px) { - .my-form .row { - margin-left: -1px; - margin-right: -1px; - } - - .my-form [class*="col-"] { - padding: 0 2px; - } + .my-form [class*="col-"] { + padding: 0 2px; } +} + body { padding-top: 50px; padding-bottom: 20px; @@ -29,12 +30,12 @@ body { /*input, select { - max-width: 280px; +max-width: 280px; }*/ -.row{ - margin-top: 2px; - margin-bottom: 2px +.row { + margin-top: 2px; + margin-bottom: 2px } textarea { @@ -68,28 +69,28 @@ input[type="checkbox"].input-validation-error { } .navbar-inner { - padding-left: 20px; - padding-right: 20px; - background-color: #87b3de; - background-image: -moz-linear-gradient(top,#87b3de, #4d79a5); - background-image: -ms-linear-gradient(top,#87b3de, #4d79a5); - background-image: -webkit-gradient(linear, 0 0, 0 50%, from( #87b3de), to(#4d79a5)); - background-image: -webkit-linear-gradient(top,#87b3de, #4d79a5); - background-image: -o-linear-gradient(top, #87b3de, #4d79a5); - background-image: linear-gradient(top, #87b3de, #4d79a5); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#87b3de', endColorstr='#4d79a5', GradientType=0); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + padding-left: 20px; + padding-right: 20px; + background-color: #87b3de; + background-image: -moz-linear-gradient(top, #87b3de, #4d79a5); + background-image: -ms-linear-gradient(top, #87b3de, #4d79a5); + background-image: -webkit-gradient(linear, 0 0, 0 50%, from(#87b3de), to(#4d79a5)); + background-image: -webkit-linear-gradient(top, #87b3de, #4d79a5); + background-image: -o-linear-gradient(top, #87b3de, #4d79a5); + background-image: linear-gradient(top, #87b3de, #4d79a5); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#87b3de', endColorstr='#4d79a5', GradientType=0); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); } .label-color { - background-color: #e5e0e0; - } + background-color: #e5e0e0; +} .linkbutton { display: inline-block; @@ -101,6 +102,17 @@ input[type="checkbox"].input-validation-error { border: 0; vertical-align: middle; } + .linkbutton.edit { background: url('/Content/icons/edit.gif'); } + +.modal-dialog { + margin-top: 80px; +} + +.affix { + position: fixed; + top: 55px; + left: 25px; +} \ No newline at end of file diff --git a/Fab2ApprovalSystem/Controllers/ECNController.cs b/Fab2ApprovalSystem/Controllers/ECNController.cs index aaca0ba..6428de4 100644 --- a/Fab2ApprovalSystem/Controllers/ECNController.cs +++ b/Fab2ApprovalSystem/Controllers/ECNController.cs @@ -601,7 +601,7 @@ public class ECNController : PdfViewController { try { string emailSentList = ""; ECN ecn = ecnDMO.GetECN(ecnNumber); - emailSentList = ECNHelper.NotifySubmitter(_AppSettings, ecnNumber, ecnTypeString, ecn); + emailSentList = ECNHelper.NotifySubmitter(_AppSettings, ecnNumber, ecnTypeString, ecn); try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Approvers for Step " + ":" + emailSentList }); } catch { } @@ -625,7 +625,7 @@ public class ECNController : PdfViewController { ECN ecn = ecnDMO.GetECN(ecnNumber); IEnumerable ecnAdminIDs = MiscDMO.GetUserIDsBySubRoleID(383); foreach (int id in ecnAdminIDs) { - emailSentList = ECNHelper.NotifyAdmin(_AppSettings, ecnNumber, ecnTypeString, ecn, id); + emailSentList = ECNHelper.NotifyAdmin(_AppSettings, ecnNumber, ecnTypeString, ecn, id); try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Approvers for Step " + ":" + emailSentList }); } catch { } @@ -650,7 +650,7 @@ public class ECNController : PdfViewController { string emailSentList = ""; ECN ecn = ecnDMO.GetECN(ecnNumber); List emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList(); - emailSentList = ECNHelper.NotifyApprovers(_AppSettings, ecnNumber, ecnTypeString, emailSentList, ecn, emailIst); + emailSentList = ECNHelper.NotifyApprovers(_AppSettings, ecnNumber, ecnTypeString, emailSentList, ecn, emailIst); try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); } catch { } @@ -953,8 +953,7 @@ public class ECNController : PdfViewController { } catch { } } - public void NotifyApproversForCancellation(int ecnNumber, byte currentStep, int documentType, string ecnTypeString) { - ECN ecn = ecnDMO.GetECN(ecnNumber); + public void NotifyApproversForCancellation(int ecnNumber, ECN ecn, byte currentStep, int documentType, string ecnTypeString) { string emailSentList = ECNHelper.NotifyApproversForCancellation(_AppSettings, ecnNumber, currentStep, documentType, ecnTypeString, ecn); try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); @@ -977,10 +976,10 @@ public class ECNController : PdfViewController { } catch { } } - public void NotifyTECNCancellation(int ecnNumber, string ecnFolderPath) { + public void NotifyTECNCancellation(int ecnNumber, string ecnFolderPath, string comments) { ECN ecn = ecnDMO.GetECN(ecnNumber); List notificationUserList = ecnDMO.GetTECNNotificationUsers().ToList(); - string emailSentList = ECNHelper.NotifyTECNCancellation(_AppSettings, userDMO, ecnNumber, ecnFolderPath, ecn, notificationUserList); + string emailSentList = ECNHelper.NotifyTECNCancellation(_AppSettings, userDMO, ecnNumber, ecnFolderPath, comments, ecn, notificationUserList); try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "E-TECN", OperationType = "Email", Comments = "Approvers for Cancellation :" + emailSentList }); } catch { } @@ -1157,22 +1156,24 @@ public class ECNController : PdfViewController { return Content(ecnDMO.PCRBExists(pcrb).ToString()); } - public ActionResult CancelDocument(int ecnNumber, byte currentStep, int documentType, string ecnTypeString) { + public ActionResult CancelDocument(int ecnNumber, byte currentStep, int documentType, string ecnTypeString, string comments = "") { + ECN ecn = ecnDMO.GetECN(ecnNumber); bool lastApproverAndLastStep = false; + if (ecn.IsTECN && ecn.SubmitedDate is not null && currentStep >= 1) + Approve(ecnNumber, currentStep, comments, documentType, ecnTypeString); int appoverCount = ecnDMO.SubmitForCancellation(ecnNumber, (byte)GlobalVars.WorkFLowStepNumber.Step1, (int)Session[GlobalVars.SESSION_USERID], documentType, ecnTypeString, (int)GlobalVars.TECNExpirationCancellation.Cancellation); if (appoverCount > 0) { - NotifyApproversForCancellation(ecnNumber, currentStep, documentType, ecnTypeString); - } else // TODO Automatically close the - { - lastApproverAndLastStep = ApproveCancellation(ecnNumber, currentStep, "", documentType, ecnTypeString); + NotifyApproversForCancellation(ecnNumber, ecn, currentStep, documentType, ecnTypeString); + } else { // TODO Automatically close the + lastApproverAndLastStep = ApproveCancellation(ecnNumber, currentStep, comments, documentType, ecnTypeString); } if (!lastApproverAndLastStep) { try { lastApproverAndLastStep = true; - ECNPdf ecn = new ECNPdf(); - GenerateECNPdf(ecnNumber, out ecn); + ECNPdf ecnPDF = new ECNPdf(); + GenerateECNPdf(ecnNumber, out ecnPDF); string sourceDirectory = _AppSettings.AttachmentFolder + "ECN\\" + ecnNumber.ToString() + "\\"; string outputFullFilePath = ""; @@ -1184,7 +1185,7 @@ public class ECNController : PdfViewController { Zipper zip = new Zipper(); zip.CreateZip(outputFullFilePath, sourceDirectory); - NotifyTECNCancellation(ecnNumber, outputFullFilePath); + NotifyTECNCancellation(ecnNumber, outputFullFilePath, comments); } catch (Exception ex) { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "TECN", OperationType = "Error", Comments = ex.Message }); @@ -1208,19 +1209,20 @@ public class ECNController : PdfViewController { public bool ApproveCancellation(int ecnNumber, byte currentStep, string comments, int documentType, string ecnTypeString) { bool lastApproverAndLastStep = false; bool lastStep = false; + ECN ecn = ecnDMO.GetECN(ecnNumber); bool lastApprover = ecnDMO.ECNApproveCancelled_ExpiredDocument(ecnNumber, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], documentType); while (lastApprover && !lastStep) { currentStep++; lastApprover = ecnDMO.ECNApproveCancelled_ExpiredDocument(ecnNumber, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], documentType); - NotifyApproversForCancellation(ecnNumber, currentStep, documentType, ecnTypeString); + NotifyApproversForCancellation(ecnNumber, ecn, currentStep, documentType, ecnTypeString); } if (lastApprover && lastStep) { try { lastApproverAndLastStep = true; - ECNPdf ecn = new ECNPdf(); - GenerateECNPdf(ecnNumber, out ecn); + ECNPdf ecnPDF = new ECNPdf(); + GenerateECNPdf(ecnNumber, out ecnPDF); string sourceDirectory = _AppSettings.AttachmentFolder + "ECN\\" + ecnNumber.ToString() + "\\"; string outputFullFilePath = ""; @@ -1232,7 +1234,7 @@ public class ECNController : PdfViewController { Zipper zip = new Zipper(); zip.CreateZip(outputFullFilePath, sourceDirectory); - NotifyTECNCancellation(ecnNumber, outputFullFilePath); + NotifyTECNCancellation(ecnNumber, outputFullFilePath, comments); } catch (Exception ex) { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "TECN", OperationType = "Error", Comments = ex.Message }); diff --git a/Fab2ApprovalSystem/EmailTemplates/TECNCancelled.txt b/Fab2ApprovalSystem/EmailTemplates/TECNCancelled.txt index 98c1e59..0092356 100644 --- a/Fab2ApprovalSystem/EmailTemplates/TECNCancelled.txt +++ b/Fab2ApprovalSystem/EmailTemplates/TECNCancelled.txt @@ -6,6 +6,8 @@ Please review the cancelled TECN form in the attachment.

https://messa016ec.infineon.com/ECN/Edit?issueID={1}

+Comments: {5} +

If you have any questions or trouble logging on please contact a site administrator.

diff --git a/Fab2ApprovalSystem/EmailTemplates/TECNReturnedToProcess.txt b/Fab2ApprovalSystem/EmailTemplates/TECNReturnedToProcess.txt new file mode 100644 index 0000000..701b8ff --- /dev/null +++ b/Fab2ApprovalSystem/EmailTemplates/TECNReturnedToProcess.txt @@ -0,0 +1,17 @@ + +*****Please DO NOT reply to this email***** +

+{3}# {0} has been returned to process. Please remove posted TECN from point of use. The returned to process date is {4} +Please review the returned to process TECN form in the attachment. +

+https://messa016ec.infineon.com/ECN/Edit?issueID={1} +

+Comments: {5} +

+ +If you have any questions or trouble logging on please contact a site administrator. +

+Thank you! + + +
diff --git a/Fab2ApprovalSystem/Fab2ApprovalSystem.csproj b/Fab2ApprovalSystem/Fab2ApprovalSystem.csproj index a4abd6b..6a98c01 100644 --- a/Fab2ApprovalSystem/Fab2ApprovalSystem.csproj +++ b/Fab2ApprovalSystem/Fab2ApprovalSystem.csproj @@ -388,8 +388,10 @@ + + @@ -514,6 +516,7 @@ + diff --git a/Fab2ApprovalSystem/Misc/ECNHelper.cs b/Fab2ApprovalSystem/Misc/ECNHelper.cs index 770927f..a0ebb65 100644 --- a/Fab2ApprovalSystem/Misc/ECNHelper.cs +++ b/Fab2ApprovalSystem/Misc/ECNHelper.cs @@ -126,7 +126,7 @@ public class ECNHelper { return emailSentList; } - public static string NotifyTECNCancellation(AppSettings appSettings, UserAccountDMO userDMO, int ecnNumber, string ecnFolderPath, ECN ecn, List notificationUserList) { + public static string NotifyTECNCancellation(AppSettings appSettings, UserAccountDMO userDMO, int ecnNumber, string ecnFolderPath, string comments, ECN ecn, List notificationUserList) { string emailSentList = ""; List emailIst = MiscDMO.GetTECNCancelledApprovalNotifyList(ecnNumber).Distinct().ToList(); foreach (int userId in notificationUserList) { @@ -135,23 +135,27 @@ public class ECNHelper { 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 subject; + string emailTemplate; string senderName = "ECN"; + string userEmail = string.Empty; + DateTime dateTime = ecn.CancellationApprovalDate is null ? DateTime.Now : ecn.CancellationApprovalDate.Value; + if (ecn.ExpirationDate > DateTime.Today || ecn.ExtensionDate > DateTime.Today) { + emailTemplate = "TECNCancelled.txt"; + subject = "TECN Cancellation Approved Notice - " + ecnNumber + " for " + ecn.Title + ", Cancelled:" + dateTime; + } else { + emailTemplate = "TECNReturnedToProcess.txt"; + subject = "TECN Return to Process Approved Notice - " + ecnNumber + " for " + ecn.Title + ", Returned:" + dateTime; + } EmailNotification en = new(appSettings, subject); - string[] emailparams = new string[5]; + string[] emailparams = new string[6]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = "TECN"; emailparams[4] = DateTime.Now.ToString(); + emailparams[5] = comments; #if (DEBUG) userEmail = GlobalVars.SENDER_EMAIL; diff --git a/Fab2ApprovalSystem/Views/ECN/EditApproval.cshtml b/Fab2ApprovalSystem/Views/ECN/EditApproval.cshtml index 4d0943e..d72fd88 100644 --- a/Fab2ApprovalSystem/Views/ECN/EditApproval.cshtml +++ b/Fab2ApprovalSystem/Views/ECN/EditApproval.cshtml @@ -86,29 +86,47 @@ if (Model.IsTECN && !Model.CancellationInProgress && !Model.CancellationApproved && !Model.ExpirationInProgress && !Model.ExpirationProcessed && !Model.Converted - && !Model.LockedForConversion - && (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today)) + && !Model.LockedForConversion) { ViewBag.CanResubmit = "true"; - + if (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today) + { + + } + else + { + + } } else if (Model.IsTECN && !Model.CancellationInProgress && !Model.CancellationApproved && !Model.ExpirationInProgress && !Model.ExpirationProcessed - && Model.ConversionApprovalInProgress == false - && (Model.ExpirationDate >= DateTime.Today || Model.ExtensionDate >= DateTime.Today)) + && Model.ConversionApprovalInProgress == false) { - + if (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today) + { + + } + else + { + + } } else if (Model.IsEmergencyTECN && !Model.CancellationInProgress && !Model.CancellationApproved && !Model.ExpirationInProgress - && !Model.ExpirationProcessed && !Model.Converted - && (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today)) + && !Model.ExpirationProcessed && !Model.Converted) { ViewBag.CanResubmit = "true"; - + if (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today) + { + + } + else + { + + } } } @@ -1251,6 +1269,9 @@ +@Html.Partial("_ECNCancel") +@Html.Partial("_ECNReturnToProcess") + @Html.Partial("_ECNReassignOriginator") \ No newline at end of file diff --git a/Fab2ApprovalSystem/Views/ECN/_ECNReturnToProcess.cshtml b/Fab2ApprovalSystem/Views/ECN/_ECNReturnToProcess.cshtml new file mode 100644 index 0000000..97c034a --- /dev/null +++ b/Fab2ApprovalSystem/Views/ECN/_ECNReturnToProcess.cshtml @@ -0,0 +1,75 @@ + + \ No newline at end of file