4 Commits

Author SHA1 Message Date
e020ec8c01 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
2025-01-22 09:30:59 -07:00
e68a1a4c3b Fixed app settings 2025-01-17 10:24:26 -07:00
7ddda56987 Moved GetEnvironmentVariable calls to Application_Start 2025-01-15 15:16:36 -07:00
77f45fabb1 Added PCRB controller for my task links 2025-01-15 14:54:22 -07:00
14 changed files with 322 additions and 128 deletions

View File

@ -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;
}

View File

@ -24,12 +24,9 @@ namespace Fab2ApprovalSystem.Controllers;
[Authorize]
public class AccountController : Controller {
private string _apiBaseUrl;
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) {
_apiBaseUrl = Environment.GetEnvironmentVariable("FabApprovalApiBaseUrl") ??
throw new ArgumentNullException("FabApprovalApiBaseUrl environment variable not found");
}
public AccountController(UserManager<ApplicationUser> userManager) {
@ -69,7 +66,7 @@ public class AccountController : Controller {
bool isLoginValid;
HttpClient httpClient = HttpClientFactory.Create();
httpClient.BaseAddress = new Uri(_apiBaseUrl);
httpClient.BaseAddress = new Uri(GlobalVars.AppSettings.ApiBaseUrl);
LoginResult loginResult = await AccountDMO.LoginAsync(httpClient, model);
@ -121,7 +118,7 @@ public class AccountController : Controller {
bool isLoginValid;
HttpClient httpClient = HttpClientFactory.Create();
httpClient.BaseAddress = new Uri(_apiBaseUrl);
httpClient.BaseAddress = new Uri(GlobalVars.AppSettings.ApiBaseUrl);
LoginResult loginResult = await AccountDMO.ExternalAuthSetupAsync(httpClient, authAttempt);

View File

@ -52,9 +52,7 @@ public class ChangeControlController : Controller {
string encodedJwt = System.Net.WebUtility.UrlEncode(jwt);
string refreshToken = Session["RefreshToken"].ToString();
string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken);
string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ??
"https://localhost:7255";
string mrbUrl = $"{wasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/pcrb/{issueID}";
string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/pcrb/{issueID}";
return Redirect(mrbUrl);
}
@ -64,9 +62,7 @@ public class ChangeControlController : Controller {
string encodedJwt = System.Net.WebUtility.UrlEncode(jwt);
string refreshToken = Session["RefreshToken"].ToString();
string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken);
string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ??
"https://localhost:7255";
string mrbUrl = $"{wasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/pcrb/{issueID}";
string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/pcrb/{issueID}";
return Redirect(mrbUrl);
}

View File

@ -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<int> 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<string> 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<int> 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 });

View File

@ -79,9 +79,7 @@ public class MRBController : Controller {
string encodedJwt = System.Net.WebUtility.UrlEncode(jwt);
string refreshToken = Session["RefreshToken"].ToString();
string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken);
string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ??
"https://localhost:7255";
string mrbUrl = $"{wasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/mrb/{issueID}";
string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/mrb/{issueID}";
return Redirect(mrbUrl);
}
@ -104,9 +102,7 @@ public class MRBController : Controller {
string encodedJwt = System.Net.WebUtility.UrlEncode(jwt);
string refreshToken = Session["RefreshToken"].ToString();
string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken);
string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ??
"https://localhost:7255";
string mrbUrl = $"{wasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/mrb/{issueID}";
string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/mrb/{issueID}";
return Redirect(mrbUrl);
}

View File

@ -0,0 +1,20 @@
using System;
using System.Web.Mvc;
using Fab2ApprovalSystem.Misc;
namespace Fab2ApprovalSystem.Controllers;
[Authorize]
[SessionExpireFilter]
public class PCRBController : Controller {
public ActionResult Edit(int issueID) {
string jwt = Session["JWT"].ToString();
string encodedJwt = System.Net.WebUtility.UrlEncode(jwt);
string refreshToken = Session["RefreshToken"].ToString();
string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken);
string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/pcrb/{issueID}";
return Redirect(mrbUrl);
}
}

View File

@ -6,6 +6,8 @@ Please review the cancelled TECN form in the attachment.
<br/><br/>
https://messa016ec.infineon.com/ECN/Edit?issueID={1}
<br/><br/>
Comments: {5}
<br/><br/>
If you have any questions or trouble logging on please contact a site administrator.
<br/><br/>

View File

@ -0,0 +1,17 @@
<font size="2" face="verdana">
*****Please DO NOT reply to this email*****
<br/><br/>
{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.
<br/><br/>
https://messa016ec.infineon.com/ECN/Edit?issueID={1}
<br/><br/>
Comments: {5}
<br/><br/>
If you have any questions or trouble logging on please contact a site administrator.
<br/><br/>
Thank you!
</font>

View File

@ -179,7 +179,7 @@
<LastGenOutput>FabApproval.Designer.cs</LastGenOutput>
</EntityDeploy>
</ItemGroup>
<ItemGroup>
<ItemGroup>
<Compile Include="Models\FabApproval.Context.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
@ -255,6 +255,7 @@
<Compile Include="Controllers\TrainingController.cs" />
<Compile Include="Controllers\WebAPIController.cs" />
<Compile Include="Controllers\WorkflowController.cs" />
<Compile Include="Controllers\PCRBController.cs" />
<Compile Include="DMO\AccountDMO.cs" />
<Compile Include="DMO\AdminDMO.cs" />
<Compile Include="DMO\ApprovalLogDMO.cs" />
@ -387,8 +388,10 @@
<Content Include="Views\CorrectiveAction\_D7PAAttachment.cshtml" />
<Content Include="Views\CorrectiveAction\Edit.cshtml" />
<Content Include="Views\CorrectiveAction\ReadOnlyCA.cshtml" />
<Content Include="Views\ECN\_ECNCancel.cshtml" />
<Content Include="Views\ECN\_ECNLayout.cshtml" />
<Content Include="Views\ECN\_ECNReassignOriginator.cshtml" />
<Content Include="Views\ECN\_ECNReturnToProcess.cshtml" />
<Content Include="Views\ECN\Acknowledge.cshtml" />
<Content Include="Views\ECN\ECNApprovalPdf.cshtml" />
<Content Include="Views\ECN\ECNPdf.cshtml" />
@ -513,6 +516,7 @@
<Content Include="EmailTemplates\TECNExpirationApproval.txt" />
<Content Include="EmailTemplates\TECNExpired.txt" />
<Content Include="EmailTemplates\TECNExtensionReject.txt" />
<Content Include="EmailTemplates\TECNReturnedToProcess.txt" />
<Content Include="EmailTemplates\WorkRequestApproval.txt" />
<Content Include="EmailTemplates\WorkRequestAssigned.txt" />
<Content Include="EmailTemplates\WorkRequestReAssigned.txt" />

View File

@ -126,7 +126,7 @@ public class ECNHelper {
return emailSentList;
}
public static string NotifyTECNCancellation(AppSettings appSettings, UserAccountDMO userDMO, int ecnNumber, string ecnFolderPath, ECN ecn, List<int> notificationUserList) {
public static string NotifyTECNCancellation(AppSettings appSettings, UserAccountDMO userDMO, int ecnNumber, string ecnFolderPath, string comments, ECN ecn, List<int> notificationUserList) {
string emailSentList = "";
List<string> 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;

View File

@ -8,7 +8,7 @@ namespace Fab2ApprovalSystem.Models;
public class AppSettings {
public AppSettings(string adminNotificationRecepient,
string? apiBaseUrl,
string apiBaseUrl,
string attachmentFolder,
string? attachmentUrl,
string caBlankFormsLocation,
@ -46,6 +46,7 @@ public class AppSettings {
string urls,
int userId,
bool userIsAdmin,
string wasmClientUrl,
string wsr_URL,
string? workingDirectoryName) {
AdminNotificationRecepient = adminNotificationRecepient;
@ -88,11 +89,12 @@ public class AppSettings {
UserId = userId;
UserIsAdmin = userIsAdmin;
WSR_URL = wsr_URL;
WasmClientUrl = wasmClientUrl;
WorkingDirectoryName = workingDirectoryName;
}
public string AdminNotificationRecepient { get; }
public string? ApiBaseUrl { get; }
public string ApiBaseUrl { get; }
public string AttachmentFolder { get; }
public string? AttachmentUrl { get; }
public string CABlankFormsLocation { get; }
@ -130,6 +132,7 @@ public class AppSettings {
public string URLs { get; }
public int UserId { get; }
public bool UserIsAdmin { get; }
public string WasmClientUrl { get; }
public string WSR_URL { get; }
public string? WorkingDirectoryName { get; }
@ -211,12 +214,15 @@ public class AppSettings {
throw new ArgumentNullException("SSRSPassword environment variable not found");
string testEmailRecipients = ConfigurationManager.AppSettings["Test Email Recipients"] ??
throw new ArgumentNullException("Test Email Recipients environment variable not found");
string? apiBaseUrl = ConfigurationManager.AppSettings["FabApprovalApiBaseUrl"]?.ToString();
string apiBaseUrl = Environment.GetEnvironmentVariable("FabApprovalApiBaseUrl") ??
throw new ArgumentNullException("FabApprovalApiBaseUrl environment variable not found");
string? attachmentUrl = ConfigurationManager.AppSettings["AttachmentUrl"]?.ToString();
string? company = ConfigurationManager.AppSettings["Company"]?.ToString();
string? smtpServer = ConfigurationManager.AppSettings["SMTP Server"]?.ToString();
string? urls = ConfigurationManager.AppSettings["URLs"]?.ToString();
string? workingDirectoryName = ConfigurationManager.AppSettings["WorkingDirectoryName"]?.ToString();
string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ??
"https://localhost:7255";
result = new(adminNotificationRecepient: adminNotificationRecepient,
apiBaseUrl: apiBaseUrl,
attachmentFolder: attachmentFolder,
@ -256,6 +262,7 @@ public class AppSettings {
urls: urls,
userId: userId,
userIsAdmin: Misc.GlobalVars.USER_ISADMIN,
wasmClientUrl: wasmClientUrl,
wsr_URL: Misc.GlobalVars.WSR_URL,
workingDirectoryName: workingDirectoryName);
return result;

View File

@ -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";
<input type="button" value="Change Type" class="btn btn-primary btn-xs" id="ReSubmitDocument" disabled="disabled" />
<input type="button" value="Cancel Document" class="btn btn-primary btn-xs" id="CancelDocument" />
if (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today)
{
<input type="button" value="Cancel Document" class="btn btn-primary btn-xs" id="CancelDocument" />
}
else
{
<input type="button" value="Return to Process" class="btn btn-primary btn-xs" id="ReturnToProcessDocument" />
}
}
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)
{
<input type="button" value="Cancel Document" class="btn btn-primary btn-xs" id="CancelDocument" />
if (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today)
{
<input type="button" value="Cancel Document" class="btn btn-primary btn-xs" id="CancelDocument" />
}
else
{
<input type="button" value="Return to Process" class="btn btn-primary btn-xs" id="ReturnToProcessDocument" />
}
}
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";
<input type="button" value="Change Type" class="btn btn-primary btn-xs" id="ReSubmitDocument" disabled="disabled" />
<input type="button" value="Cancel Document" class="btn btn-primary btn-xs" id="CancelDocument" />
if (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today)
{
<input type="button" value="Cancel Document" class="btn btn-primary btn-xs" id="CancelDocument" />
}
else
{
<input type="button" value="Return to Process" class="btn btn-primary btn-xs" id="ReturnToProcessDocument" />
}
}
}
@ -1251,6 +1269,9 @@
</div>
</div>
@Html.Partial("_ECNCancel")
@Html.Partial("_ECNReturnToProcess")
@Html.Partial("_ECNReassignOriginator")
<script type="text/javascript">
@ -2188,40 +2209,6 @@
return false;
});
$('#CancelDocument').on('click', function () {
docType = 5;
if (confirm("Are you sure you want to Cancel this document?")) {
$.ajax({
url: "/ECN/CancelDocument",
type: "GET",
datatype: "json",
data: {
ecnNumber: $("#txtECNNumber").val(),
currentStep: 1,
documentType: docType,
ecnTypeString: ecnTypeString
},
success: function (data) {
if (data == 'Redirect') {
var url = '@Url.Action("ReadOnly", "ECN", new { issueID = "__id__" })';
url = url.replace('amp;', '');
window.location.href = url.replace('__id__', $("#txtECNNumber").val());
}
else {
// TODO alert an error message
}
},
error: function (result) {
alert("Failed on Cancel" + result);
}
});
}
return false;
});
var returnNoOfDays = function () {
//var start = new Date($('#txSubmitDate').val());
var start = new Date();

View File

@ -0,0 +1,75 @@
<div class="modal fade" id="Cancel" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel"><center>Has the process returned to the original state?</center></h4>
</div>
<div class="modal-body">
<div class="control-group">
<div class="row">
<div class="col-sm-13">
<h4 class="modal-title">Comments (Required):</h4>
<textarea class="form-control" rows="5" id="comments" style="resize: none;"></textarea>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">No</button>
<button type="button" class="btn btn-primary" id="ConfirmCancel">Confirm Cancel (Yes)</button>
</div>
</div>
</div>
</div>
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$("#CancelDocument").click(function (e) {
$("#comments").val("");
$("#Cancel").modal('show');
});
$('#ConfirmCancel').on('click', function () {
if ($("#comments").val() == "") {
alert("Comments are required");
return;
}
$('#ConfirmCancel').attr("disabled", true);
$.ajax({
url: "/ECN/CancelDocument",
type: "GET",
datatype: "json",
data: {
ecnNumber: $("#txtECNNumber").val(),
currentStep: 1,
documentType: 5,
ecnTypeString: ecnTypeString,
comments: $("#comments").val(),
},
success: function (data) {
$("#Cancel").modal('hide');
var url = '@Url.Action("ReadOnly", "ECN", new { issueID = "__id__" })';
url = url.replace('amp;', '');
window.location.href = url.replace('__id__', $("#txtECNNumber").val());
},
error: function (result) {
$('#ConfirmCancel').attr("disabled", false);
alert("Server error while canceling document");
}
});
});
});
</script>

View File

@ -0,0 +1,75 @@
<div class="modal fade" id="ReturnToProcess" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel"><center>Has the process returned to the original state?</center></h4>
</div>
<div class="modal-body">
<div class="control-group">
<div class="row">
<div class="col-sm-13">
<h4 class="modal-title">Comments (Required):</h4>
<textarea class="form-control" rows="5" id="ReturnToProcessComments" style="resize: none;"></textarea>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">No</button>
<button type="button" class="btn btn-primary" id="ConfirmReturnToProcess">Confirm Return to Process (Yes)</button>
</div>
</div>
</div>
</div>
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$("#ReturnToProcessDocument").click(function (e) {
$("#ReturnToProcessComments").val("");
$("#ReturnToProcess").modal('show');
});
$('#ConfirmReturnToProcess').on('click', function () {
if ($("#ReturnToProcessComments").val() == "") {
alert("Comments are required");
return;
}
$('#ConfirmReturnToProcess').attr("disabled", true);
$.ajax({
url: "/ECN/CancelDocument",
type: "GET",
datatype: "json",
data: {
ecnNumber: $("#txtECNNumber").val(),
currentStep: 1,
documentType: 5,
ecnTypeString: ecnTypeString,
comments: $("#ReturnToProcessComments").val(),
},
success: function (data) {
$("#ReturnToProcess").modal('hide');
var url = '@Url.Action("ReadOnly", "ECN", new { issueID = "__id__" })';
url = url.replace('amp;', '');
window.location.href = url.replace('__id__', $("#txtECNNumber").val());
},
error: function (result) {
$('#ConfirmReturnToProcess').attr("disabled", false);
alert("Server error while ReturnToProcessing document");
}
});
});
});
</script>