1 Commits

Author SHA1 Message Date
83789cdd91 Added ControllerExtensions to be used instead of HtmlViewRenderer for net8
Added HttpException class for missing HttpException for net8

Wrapped HttpContext.Session, GetJsonResult, IsAjaxRequest and GetUserIdentityName in controllers for net8

Added AuthenticationService to test Fab2ApprovalMKLink code for net8

Compile conditionally flags to debug in dotnet core
2025-05-19 13:29:54 -07:00
10 changed files with 834 additions and 667 deletions

View File

@ -0,0 +1,74 @@
#if NET8
using System;
using System.IO;
using System.Threading.Tasks;
using Fab2ApprovalSystem.PdfGenerator;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.DependencyInjection;
namespace Fab2ApprovalSystem.Extensions;
public static class ControllerExtensions {
public static ActionResult GetBinaryContentResult<TModel>(this Controller controller, string viewName, string contentType, TModel model) {
string pageTitle = string.Empty;
string htmlText = RenderViewToString(controller, viewName, model);
StandardPdfRenderer standardPdfRenderer = new();
// Let the html be rendered into a PDF document through iTextSharp.
byte[] buffer = standardPdfRenderer.Render(htmlText, pageTitle);
// Return the PDF as a binary stream to the client.
return new BinaryContentResult(buffer, contentType);
}
public static string RenderViewToString<TModel>(this Controller controller, string viewName, TModel model) {
if (string.IsNullOrEmpty(viewName))
viewName = controller.ControllerContext.ActionDescriptor.ActionName;
controller.ViewData.Model = model;
using (StringWriter writer = new()) {
try {
CompositeViewEngine compositeViewEngine = controller.HttpContext.RequestServices.GetRequiredService(typeof(ICompositeViewEngine)) as CompositeViewEngine;
if (compositeViewEngine is null || compositeViewEngine.ViewEngines.Count == 0) { }
ViewEngineResult viewResult = null;
if (viewName.EndsWith(".cshtml"))
viewResult = compositeViewEngine.GetView(viewName, viewName, false);
else
viewResult = compositeViewEngine.FindView(controller.ControllerContext, viewName, false);
if (!viewResult.Success)
return $"A view with the name '{viewName}' could not be found";
ViewContext viewContext = new(
controller.ControllerContext,
viewResult.View,
controller.ViewData,
controller.TempData,
writer,
new HtmlHelperOptions()
);
Task task = viewResult.View.RenderAsync(viewContext);
task.Wait();
return writer.GetStringBuilder().ToString();
} catch (Exception ex) {
return $"Failed - {ex.Message}";
}
}
}
}
#endif

View File

@ -116,7 +116,3 @@ input[type="checkbox"].input-validation-error {
top: 55px;
left: 25px;
}
.navbar-header-hidden {
display: none;
}

View File

@ -7,22 +7,22 @@ using System.Linq;
#if !NET8
using System.Web;
using System.Web.Mvc;
using Fab2ApprovalSystem.PdfGenerator;
#endif
#if NET8
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.DependencyInjection;
#endif
#if NET8
using Fab2ApprovalSystem.Extensions;
#endif
using Fab2ApprovalSystem.DMO;
using Fab2ApprovalSystem.Misc;
using Fab2ApprovalSystem.Models;
using Fab2ApprovalSystem.ViewModels;
using Fab2ApprovalSystem.PdfGenerator;
#if !NET8
using Kendo.Mvc.Extensions;
@ -35,11 +35,12 @@ namespace Fab2ApprovalSystem.Controllers;
#if !NET8
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
[SessionExpireFilter]
public class ECNController : PdfViewController {
#endif
#if NET8
[Route("[controller]")]
#endif
public class ECNController : Controller {
#endif
private const string ECN_PREFIX = "ECN_";
private const string TECN_PREFIX = "TECN_";
@ -923,12 +924,19 @@ public class ECNController : Controller {
if (!di.Exists)
di.Create();
string htmlText;
string pageTitle = string.Empty;
htmlText = RenderViewToString("ECNPdf", ecn);
StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNForm_{outputFileName}");
htmlText = RenderViewToString("ECNApprovalPdf", ecn);
StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNApprovalLog_{outputFileName}");
// To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
// requires the controller to be inherited from MyController instead of MVC's Controller.
#if !NET8
SavePdf(ecnFolderPath + "\\ECNForm_" + outputFileName, "ECNPdf", ecn);
SavePdf(ecnFolderPath + "\\ECNApprovalLog_" + outputFileName, "ECNApprovalPdf", ecn);
#endif
#if NET8
string html;
html = this.RenderViewToString("ECNPdf", ecn);
System.IO.File.WriteAllText(ecnFolderPath + "\\ECNForm_" + outputFileName, html);
html = this.RenderViewToString("ECNApprovalPdf", ecn);
System.IO.File.WriteAllText(ecnFolderPath + "\\ECNApprovalLog_" + outputFileName, html);
#endif
} catch (Exception ex) {
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = GetUserIdentityName(), DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
ecn = null;
@ -938,54 +946,6 @@ public class ECNController : Controller {
return true;
}
private string RenderViewToString(string viewName, ECNPdf ecnPdf) {
string result;
ViewData.Model = ecnPdf;
using (StringWriter writer = new()) {
try {
#if !NET8
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, string.Empty);
if (viewResult is null) {
return $"A view with the name '{viewName}' could not be found";
}
ViewContext viewContext = new(ControllerContext, viewResult.View, ViewData, TempData, writer);
viewResult.View.Render(viewContext, writer);
string htmlText = writer.GetStringBuilder().ToString();
result = htmlText.Replace("navbar-header", "navbar-header-hidden");
#endif
#if NET8
ViewEngineResult viewResult;
CompositeViewEngine compositeViewEngine = HttpContext.RequestServices.GetRequiredService(typeof(ICompositeViewEngine)) as CompositeViewEngine;
if (viewName.EndsWith(".cshtml")) {
viewResult = compositeViewEngine.GetView(viewName, viewName, false);
} else {
viewResult = compositeViewEngine.FindView(ControllerContext, viewName, false);
}
if (!viewResult.Success) {
return $"A view with the name '{viewName}' could not be found";
}
ViewContext viewContext = new(ControllerContext,
viewResult.View,
ViewData,
TempData,
writer,
new HtmlHelperOptions());
System.Threading.Tasks.Task task = viewResult.View.RenderAsync(viewContext);
task.Wait();
result = writer.GetStringBuilder().ToString();
#endif
} catch (Exception ex) {
result = $"Failed - {ex.Message}";
}
}
return result;
}
public bool GenerateECNPdfDifferentLocation(int ecnNumber, int folderName) {
ECNPdf ecn = new();
try {
@ -1003,9 +963,15 @@ public class ECNController : Controller {
if (!di.Exists)
di.Create();
string pageTitle = string.Empty;
string htmlText = RenderViewToString("ECNPdf", ecn);
StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNForm_{outputFileName}");
// To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
// requires the controller to be inherited from MyController instead of MVC's Controller.
#if !NET8
SavePdf(ecnFolderPath + "\\ECNForm_" + outputFileName, "ECNPdf", ecn);
#endif
#if NET8
string html = this.RenderViewToString("ECNPdf", ecn);
System.IO.File.WriteAllText(ecnFolderPath + "\\ECNForm_" + outputFileName, html);
#endif
} catch (Exception ex) {
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = GetUserIdentityName(), DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
ecn = null;
@ -1024,14 +990,17 @@ public class ECNController : Controller {
ecn = ecnDMO.GetECNPdf(ecnNumber);
ViewBag.Category = ecnDMO.GetCategoryID(ecn);
ViewBag.TrainingNotificationTo = ecnDMO.GetTrainingNotificationTo(ecn, trainingDMO);
string pageTitle = string.Empty;
string htmlText = RenderViewToString("ECNPdf", ecn);
if (Debugger.IsAttached) {
return Content(htmlText, "text/html");
} else {
byte[] buffer = StandardPdfRenderer.GetPortableDocumentFormatBytes(pageTitle, htmlText);
return new BinaryContentResult(buffer, "application/pdf");
}
// To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
// requires the controller to be inherited from MyController instead of MVC's Controller.
#if !NET8
return ViewPdf("", "ECNPdf", ecn);
#endif
#if NET8
if (Debugger.IsAttached)
return Content(this.RenderViewToString("ECNPdf", ecn), "text/html");
else
return this.GetBinaryContentResult("ECNPdf", "application/pdf", ecn);
#endif
} catch (Exception ex) {
EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = GetUserIdentityName(), DocumentType = "ECN", OperationType = "Print PDF", Comments = ex.Message });
ecn = null;

View File

@ -1,5 +1,4 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
@ -9,22 +8,22 @@ using System.Web;
using System.Web.Mvc;
using System.Configuration;
using System.Threading;
using Fab2ApprovalSystem.PdfGenerator;
#endif
#if NET8
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.DependencyInjection;
#endif
#if NET8
using Fab2ApprovalSystem.Extensions;
#endif
using Fab2ApprovalSystem.DMO;
using Fab2ApprovalSystem.Misc;
using Fab2ApprovalSystem.Models;
using Fab2ApprovalSystem.ViewModels;
using Fab2ApprovalSystem.PdfGenerator;
#if !NET8
using Kendo.Mvc.Extensions;
@ -37,11 +36,12 @@ namespace Fab2ApprovalSystem.Controllers;
#if !NET8
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
[SessionExpireFilter]
public class LotTravelerController : PdfViewController {
#endif
#if NET8
[Route("[controller]")]
#endif
public class LotTravelerController : Controller {
#endif
private readonly LotTravelerDMO LotTravDMO = new();
private readonly string docTypeString = "LotTraveler";
@ -220,14 +220,17 @@ public class LotTravelerController : Controller {
try {
workRequest = LotTravDMO.GetLTWorkRequestItemPDF(workRequestID);
string pageTitle = string.Empty;
string htmlText = RenderViewToString("WorkRequestPDF", workRequest);
if (Debugger.IsAttached) {
return Content(htmlText, "text/html");
} else {
byte[] buffer = StandardPdfRenderer.GetPortableDocumentFormatBytes(pageTitle, htmlText);
return new BinaryContentResult(buffer, "application/pdf");
}
// To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
// requires the controller to be inherited from MyController instead of MVC's Controller.
#if !NET8
return ViewPdf("", "WorkRequestPDF", workRequest);
#endif
#if NET8
if (Debugger.IsAttached)
return Content(this.RenderViewToString("WorkRequestPDF", workRequest), "text/html");
else
return this.GetBinaryContentResult("WorkRequestPDF", "application/pdf", workRequest);
#endif
} catch (Exception ex) {
Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n DisplayWorkRequestPDF - LotTraveler\r\n" + ex.InnerException.ToString(), EventLogEntryType.Error);
EventLogDMO.Add(new WinEventLog() { IssueID = workRequest.SWRNumber, UserID = GetUserIdentityName(), DocumentType = "LotTravler", OperationType = "Generate PDF", Comments = ex.Message });
@ -236,54 +239,6 @@ public class LotTravelerController : Controller {
}
}
private string RenderViewToString(string viewName, object model) {
string result;
ViewData.Model = model;
using (StringWriter writer = new()) {
try {
#if !NET8
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, string.Empty);
if (viewResult is null) {
return $"A view with the name '{viewName}' could not be found";
}
ViewContext viewContext = new(ControllerContext, viewResult.View, ViewData, TempData, writer);
viewResult.View.Render(viewContext, writer);
string htmlText = writer.GetStringBuilder().ToString();
result = htmlText.Replace("navbar-header", "navbar-header-hidden");
#endif
#if NET8
ViewEngineResult viewResult;
CompositeViewEngine compositeViewEngine = HttpContext.RequestServices.GetRequiredService(typeof(ICompositeViewEngine)) as CompositeViewEngine;
if (viewName.EndsWith(".cshtml")) {
viewResult = compositeViewEngine.GetView(viewName, viewName, false);
} else {
viewResult = compositeViewEngine.FindView(ControllerContext, viewName, false);
}
if (!viewResult.Success) {
return $"A view with the name '{viewName}' could not be found";
}
ViewContext viewContext = new(ControllerContext,
viewResult.View,
ViewData,
TempData,
writer,
new HtmlHelperOptions());
System.Threading.Tasks.Task task = viewResult.View.RenderAsync(viewContext);
task.Wait();
result = writer.GetStringBuilder().ToString();
#endif
} catch (Exception ex) {
result = $"Failed - {ex.Message}";
}
}
return result;
}
public ActionResult WorkRequestRevision(int workRequestID) {
int isITARCompliant = 1;
LTWorkRequest workRequest = new();
@ -325,7 +280,9 @@ public class LotTravelerController : Controller {
return Content("Successfully Saved");
}
/// <summary>
///
/// </summary>
public JsonResult GetBaseFlowLocations(string baseFlow) {
List<BaseFlowLocation> loclist = LotTravDMO.GetBaseFlowLocations(baseFlow);
return GetJsonResult(loclist);
@ -412,6 +369,9 @@ public class LotTravelerController : Controller {
return Content(newWorkRequestID.ToString());
}
/// <summary>
/// For the Revison
/// </summary>
public ActionResult UpdateMaterialDetailRevision(LTWorkRequest model) {
var modelMaterialDetail = model.LTMaterial;
int previousMaterialID = model.LTMaterial.ID;
@ -1356,14 +1316,17 @@ public class LotTravelerController : Controller {
try {
traveler = LotTravDMO.GetLotTravlerPdf(ltLotID, revisionNumber);
string pageTitle = string.Empty;
string htmlText = RenderViewToString("LotTravelerPDF", traveler);
if (Debugger.IsAttached) {
return Content(htmlText, "text/html");
} else {
byte[] buffer = StandardPdfRenderer.GetPortableDocumentFormatBytes(pageTitle, htmlText);
return new BinaryContentResult(buffer, "application/pdf");
}
// To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
// requires the controller to be inherited from MyController instead of MVC's Controller.
#if !NET8
return ViewPdf("", "LotTravelerPDF", traveler);
#endif
#if NET8
if (Debugger.IsAttached)
return Content(this.RenderViewToString("LotTravelerPDF", traveler), "text/html");
else
return this.GetBinaryContentResult("LotTravelerPDF", "application/pdf", traveler);
#endif
} catch (Exception ex) {
EventLogDMO.Add(new WinEventLog() { IssueID = traveler.SWRNumber, UserID = GetUserIdentityName(), DocumentType = "LotTraveler", OperationType = "Generate PDF", Comments = ex.Message });
traveler = null;
@ -1452,7 +1415,7 @@ public class LotTravelerController : Controller {
string fileExtension = fileName.Substring(fileName.LastIndexOf("."), fileName.Length - fileName.LastIndexOf("."));
string ecnFolderPath = _AppSettings.AttachmentFolder + "LotTraveler\\" + swrNumber.ToString();
var sDocument = Path.Combine(ecnFolderPath, fileGuid + fileExtension);
var sDocument = System.IO.Path.Combine(ecnFolderPath, fileGuid + fileExtension);
var FDir_AppData = _AppSettings.AttachmentFolder;
if (!sDocument.StartsWith(FDir_AppData)) {

View File

@ -0,0 +1,36 @@
using System;
using System.IO;
using System.Threading.Tasks;
#if !NET8
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
#endif
#if NET8
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
#endif
#if !NET8
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Security.Claims;
#endif
namespace Fab2ApprovalSystem.PdfGenerator;
public class FakeView : IView {
public void Render(ViewContext viewContext, TextWriter writer) {
throw new NotImplementedException();
}
#if NET8
string IView.Path => throw new NotImplementedException();
Task IView.RenderAsync(ViewContext context) => throw new NotImplementedException();
#endif
}

View File

@ -0,0 +1,59 @@
#if !NET8
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Security;
#endif
#if NET8
using Microsoft.AspNetCore.Mvc;
#endif
#if !NET8
using System;
using System.IO;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Security.Claims;
using System.Threading.Tasks;
#endif
using System.Text;
namespace Fab2ApprovalSystem.PdfGenerator;
public class HtmlViewRenderer {
public string RenderViewToString(Controller controller, string viewName, object viewData) {
StringBuilder renderedView = new();
#if !NET8
using (StringWriter responseWriter = new(renderedView)) {
HttpResponse fakeResponse = new(responseWriter);
HttpContext fakeContext = new(HttpContext.Current.Request, fakeResponse);
ControllerContext fakeControllerContext = new(new HttpContextWrapper(fakeContext), controller.ControllerContext.RouteData, controller.ControllerContext.Controller);
var oldContext = HttpContext.Current;
HttpContext.Current = fakeContext;
using (var viewPage = new ViewPage()) {
HtmlHelper html = new HtmlHelper(CreateViewContext(responseWriter, fakeControllerContext), viewPage);
html.RenderPartial(viewName, viewData);
HttpContext.Current = oldContext;
}
}
#endif
return renderedView.ToString();
}
#if !NET8
private static ViewContext CreateViewContext(TextWriter responseWriter, ControllerContext fakeControllerContext) {
return new ViewContext(fakeControllerContext, new FakeView(), new ViewDataDictionary(), new TempDataDictionary(), responseWriter);
}
#endif
}

View File

@ -1 +1,56 @@

#if !NET8
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
#endif
#if !NET8
using System;
using System.IO;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Security.Claims;
using System.Threading.Tasks;
#endif
namespace Fab2ApprovalSystem.PdfGenerator;
#if !NET8
public class PdfViewController : Controller {
private readonly HtmlViewRenderer htmlViewRenderer;
private readonly StandardPdfRenderer standardPdfRenderer;
public PdfViewController() {
htmlViewRenderer = new HtmlViewRenderer();
standardPdfRenderer = new StandardPdfRenderer();
}
protected ActionResult ViewPdf(string pageTitle, string viewName, object model) {
// Render the view html to a string.
string htmlText = htmlViewRenderer.RenderViewToString(this, viewName, model);
// Let the html be rendered into a PDF document through iTextSharp.
byte[] buffer = standardPdfRenderer.Render(htmlText, pageTitle);
// Return the PDF as a binary stream to the client.
return new BinaryContentResult(buffer, "application/pdf");
}
protected void SavePdf(string fileName, string viewName, object model) {
// Render the view html to a string.
string htmlText = htmlViewRenderer.RenderViewToString(this, viewName, model);
// Let the html be rendered into a PDF document through iTextSharp.
byte[] buffer = standardPdfRenderer.Render(htmlText, "");
using (FileStream fs = new(fileName, FileMode.Create)) {
fs.Write(buffer, 0, buffer.Length);
}
}
}
#endif

View File

@ -9,32 +9,16 @@ using System.IO;
namespace Fab2ApprovalSystem.PdfGenerator;
public class StandardPdfRenderer {
private const int HorizontalMargin = 40;
private const int VerticalMargin = 40;
public static byte[] GetPortableDocumentFormatBytes(string pageTitle, string htmlText) {
byte[] results;
MemoryStream memoryStream = GetPortableDocumentFormat(pageTitle, htmlText);
results = new byte[memoryStream.Position];
memoryStream.Position = 0;
memoryStream.Read(results, 0, results.Length);
return results;
}
public byte[] Render(string htmlText, string pageTitle) {
byte[] renderedBuffer;
public static void WritePortableDocumentFormatToFile(string pageTitle, string htmlText, string path) {
using (MemoryStream memoryStream = GetPortableDocumentFormat(pageTitle, htmlText)) {
using (FileStream fileStream = new(path, FileMode.Create)) {
memoryStream.CopyTo(fileStream);
}
}
}
public static MemoryStream GetPortableDocumentFormat(string pageTitle, string htmlText) {
MemoryStream result = new();
using (MemoryStream outputMemoryStream = new()) {
#if !NET8
using (Document pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin)) {
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, result);
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, outputMemoryStream);
pdfWriter.CloseStream = false;
pdfWriter.PageEvent = new PrintHeaderFooter { Title = pageTitle };
pdfDocument.Open();
@ -43,9 +27,15 @@ public class StandardPdfRenderer {
htmlWorker.Parse(htmlViewReader);
}
}
}
#endif
return result;
}
}
#endif
renderedBuffer = new byte[outputMemoryStream.Position];
outputMemoryStream.Position = 0;
outputMemoryStream.Read(renderedBuffer, 0, renderedBuffer.Length);
}
return renderedBuffer;
}
}

View File

@ -1,18 +1,4 @@
@model Fab2ApprovalSystem.ViewModels.ECNPdf
@{
Layout = null;
}
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
</head>
<body class="navbar-inner">
<table style="width:100%;">
<tr>
<td>
@ -121,6 +107,7 @@
</table>
</td>
</tr>
</table>
</td>
</tr>
@ -240,6 +227,7 @@
</td>
</tr>
</table>
</td>
</tr>
@ -266,6 +254,35 @@
</table>
</td>
</tr>
@*<tr>
<td>
<table border="1">
<tr bgcolor="#c4baba" color="#000000">
<td colspan="3">Training Notification</td>
</tr>
<tr>
<td>
<table border="0">
<tr>
<td>
<font size="1">
Training:
@(Model.TrainingRequired ? "Yes" : "No")
</font>
<font size="1">
@(Model.TrainingBy.Length > 0 ? "(" + Model.TrainingBy + ")" : Model.TrainingBy)
</font>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>*@
<tr>
<td>
@ -321,8 +338,10 @@
</font>
</td>
</tr>
</table>
</td>
</tr>
<tr>
@ -330,7 +349,7 @@
<table border="1">
<tr bgcolor="#c4baba" color="#000000">
<td colspan="1">Training Notification</td>
<td colspan="5">Training Notification</td>
</tr>
<tr style="display:block;">
<td>
@ -348,8 +367,10 @@
</font>
</td>
</tr>
</table>
</td>
</tr>
<tr>
@ -496,11 +517,19 @@
</tr>
}
</table>
</td>
</tr>
</table>
</body>
</html>
</table> <!--main table -->

View File

@ -52,7 +52,7 @@ public class EngChangeNoticeDMOTests {
try { throw new Exception(); } catch (Exception) { }
}
private static void EngChangeNoticeDMO(ILogger? logger, AppSettings appSettings, int ecnNumber) {
private static void EngChangeNoticeDMO(ILogger? logger, AppSettings appSettings) {
#pragma warning disable IDE0059
SetGlobalVars(logger, appSettings);
ECN_DMO ecnDMO = new();
@ -84,9 +84,6 @@ public class EngChangeNoticeDMOTests {
// int SubmitTECNExtensionDocument(int issueID, appSettings.UserId, int documentType, DateTime extensionDate);
// void TECNExtensionLog(int ecnNumber, DateTime extensionDate);
// void UpdateECNType(int ecnNumber, string ecnType);
ECNPdf ecn = ecnDMO.GetECNPdf(ecnNumber);
string categoryId = ecnDMO.GetCategoryID(ecn);
string trainingNotificationTo = ecnDMO.GetTrainingNotificationTo(ecn, new TrainingDMO());
if (ecnDMO is null) { }
#pragma warning restore IDE0059
}
@ -95,14 +92,13 @@ public class EngChangeNoticeDMOTests {
[Ignore]
#endif
[TestMethod]
[DataRow(82689)]
public void EngChangeNoticeDMOIsAttachedOnly(int ecnNumber) {
public void EngChangeNoticeDMOIsAttachedOnly() {
_Logger?.LogInformation("Starting Web Application");
IServiceProvider? serviceProvider = _WebApplicationFactory?.Services.CreateScope().ServiceProvider;
AppSettings? appSettings = serviceProvider?.GetRequiredService<AppSettings>();
Assert.IsTrue(appSettings is not null);
if (System.Diagnostics.Debugger.IsAttached)
EngChangeNoticeDMO(_Logger, appSettings, ecnNumber);
EngChangeNoticeDMO(_Logger, appSettings);
_Logger?.LogInformation("{TestName} completed", _TestContext?.TestName);
NonThrowTryCatch();
}