Compare commits
	
		
			2 Commits
		
	
	
		
			8bae94de96
			...
			fix-core-t
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 54799f54ec | |||
| 65a433e9ab | 
@ -1,6 +1,7 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Configuration;
 | 
					using System.Configuration;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Web;
 | 
					using System.Web;
 | 
				
			||||||
using System.Web.Mvc;
 | 
					using System.Web.Mvc;
 | 
				
			||||||
@ -21,7 +22,7 @@ namespace Fab2ApprovalSystem.Controllers;
 | 
				
			|||||||
[Authorize]
 | 
					[Authorize]
 | 
				
			||||||
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
 | 
					[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
 | 
				
			||||||
[SessionExpireFilter]
 | 
					[SessionExpireFilter]
 | 
				
			||||||
public class ECNController : PdfViewController {
 | 
					public class ECNController : Controller {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private const string ECN_PREFIX = "ECN_";
 | 
					    private const string ECN_PREFIX = "ECN_";
 | 
				
			||||||
    private const string TECN_PREFIX = "TECN_";
 | 
					    private const string TECN_PREFIX = "TECN_";
 | 
				
			||||||
@ -669,9 +670,6 @@ public class ECNController : PdfViewController {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// <summary>
 | 
					 | 
				
			||||||
    /// Get a list of Approvers and the status
 | 
					 | 
				
			||||||
    /// </summary>
 | 
					 | 
				
			||||||
    public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step, bool isTECN, bool isEmergrncyTECN) {
 | 
					    public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step, bool isTECN, bool isEmergrncyTECN) {
 | 
				
			||||||
        int isITARCompliant = 0;
 | 
					        int isITARCompliant = 0;
 | 
				
			||||||
        ECN ecn = new ECN();
 | 
					        ECN ecn = new ECN();
 | 
				
			||||||
@ -893,10 +891,12 @@ public class ECNController : PdfViewController {
 | 
				
			|||||||
            if (!di.Exists)
 | 
					            if (!di.Exists)
 | 
				
			||||||
                di.Create();
 | 
					                di.Create();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
 | 
					            string htmlText;
 | 
				
			||||||
            // requires the controller to be inherited from MyController instead of MVC's Controller.
 | 
					            string pageTitle = string.Empty;
 | 
				
			||||||
            SavePdf(ecnFolderPath + "\\ECNForm_" + outputFileName, "ECNPdf", ecn);
 | 
					            htmlText = RenderViewToString("ECNPdf", ecn);
 | 
				
			||||||
            SavePdf(ecnFolderPath + "\\ECNApprovalLog_" + outputFileName, "ECNApprovalPdf", ecn);
 | 
					            StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNForm_{outputFileName}");
 | 
				
			||||||
 | 
					            htmlText = RenderViewToString("ECNApprovalPdf", ecn);
 | 
				
			||||||
 | 
					            StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNApprovalLog_{outputFileName}");
 | 
				
			||||||
        } catch (Exception ex) {
 | 
					        } catch (Exception ex) {
 | 
				
			||||||
            EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
 | 
					            EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
 | 
				
			||||||
            ecn = null;
 | 
					            ecn = null;
 | 
				
			||||||
@ -906,6 +906,24 @@ public class ECNController : PdfViewController {
 | 
				
			|||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private string RenderViewToString(string viewName, ECNPdf ecnPdf) {
 | 
				
			||||||
 | 
					        string result;
 | 
				
			||||||
 | 
					        ViewData.Model = ecnPdf;
 | 
				
			||||||
 | 
					        using (StringWriter writer = new()) {
 | 
				
			||||||
 | 
					            try {
 | 
				
			||||||
 | 
					                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);
 | 
				
			||||||
 | 
					                result = writer.GetStringBuilder().ToString();
 | 
				
			||||||
 | 
					            } catch (Exception ex) {
 | 
				
			||||||
 | 
					                result = $"Failed - {ex.Message}";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public bool GenerateECNPdfDifferentLocation(int ecnNumber, int folderName) {
 | 
					    public bool GenerateECNPdfDifferentLocation(int ecnNumber, int folderName) {
 | 
				
			||||||
        ECNPdf ecn = new ECNPdf();
 | 
					        ECNPdf ecn = new ECNPdf();
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
@ -923,9 +941,9 @@ public class ECNController : PdfViewController {
 | 
				
			|||||||
            if (!di.Exists)
 | 
					            if (!di.Exists)
 | 
				
			||||||
                di.Create();
 | 
					                di.Create();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
 | 
					            string pageTitle = string.Empty;
 | 
				
			||||||
            // requires the controller to be inherited from MyController instead of MVC's Controller.
 | 
					            string htmlText = RenderViewToString("ECNPdf", ecn);
 | 
				
			||||||
            SavePdf(ecnFolderPath + "\\ECNForm_" + outputFileName, "ECNPdf", ecn);
 | 
					            StandardPdfRenderer.WritePortableDocumentFormatToFile(pageTitle, htmlText, $"{ecnFolderPath}\\ECNForm_{outputFileName}");
 | 
				
			||||||
        } catch (Exception ex) {
 | 
					        } catch (Exception ex) {
 | 
				
			||||||
            EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
 | 
					            EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message });
 | 
				
			||||||
            ecn = null;
 | 
					            ecn = null;
 | 
				
			||||||
@ -941,9 +959,14 @@ public class ECNController : PdfViewController {
 | 
				
			|||||||
            ecn = ecnDMO.GetECNPdf(ecnNumber);
 | 
					            ecn = ecnDMO.GetECNPdf(ecnNumber);
 | 
				
			||||||
            ViewBag.Category = ecnDMO.GetCategoryID(ecn);
 | 
					            ViewBag.Category = ecnDMO.GetCategoryID(ecn);
 | 
				
			||||||
            ViewBag.TrainingNotificationTo = ecnDMO.GetTrainingNotificationTo(ecn, trainingDMO);
 | 
					            ViewBag.TrainingNotificationTo = ecnDMO.GetTrainingNotificationTo(ecn, trainingDMO);
 | 
				
			||||||
            // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
 | 
					            string pageTitle = string.Empty;
 | 
				
			||||||
            // requires the controller to be inherited from MyController instead of MVC's Controller.
 | 
					            string htmlText = RenderViewToString("ECNPdf", ecn);
 | 
				
			||||||
            return this.ViewPdf("", "ECNPdf", ecn);
 | 
					            if (System.Diagnostics.Debugger.IsAttached) {
 | 
				
			||||||
 | 
					                return Content(htmlText, "text/html");
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                byte[] buffer = StandardPdfRenderer.GetPortableDocumentFormatBytes(pageTitle, htmlText);
 | 
				
			||||||
 | 
					                return new BinaryContentResult(buffer, "application/pdf");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        } catch (Exception ex) {
 | 
					        } catch (Exception ex) {
 | 
				
			||||||
            EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Print PDF", Comments = ex.Message });
 | 
					            EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Print PDF", Comments = ex.Message });
 | 
				
			||||||
            ecn = null;
 | 
					            ecn = null;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Configuration;
 | 
					using System.Configuration;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Web;
 | 
					using System.Web;
 | 
				
			||||||
@ -20,7 +21,7 @@ namespace Fab2ApprovalSystem.Controllers;
 | 
				
			|||||||
[Authorize]
 | 
					[Authorize]
 | 
				
			||||||
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
 | 
					[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
 | 
				
			||||||
[SessionExpireFilter]
 | 
					[SessionExpireFilter]
 | 
				
			||||||
public class LotTravelerController : PdfViewController {
 | 
					public class LotTravelerController : Controller {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    LotTravelerDMO LotTravDMO = new LotTravelerDMO();
 | 
					    LotTravelerDMO LotTravDMO = new LotTravelerDMO();
 | 
				
			||||||
    string docTypeString = "LotTraveler";
 | 
					    string docTypeString = "LotTraveler";
 | 
				
			||||||
@ -199,9 +200,14 @@ public class LotTravelerController : PdfViewController {
 | 
				
			|||||||
        try {
 | 
					        try {
 | 
				
			||||||
            workRequest = LotTravDMO.GetLTWorkRequestItemPDF(workRequestID);
 | 
					            workRequest = LotTravDMO.GetLTWorkRequestItemPDF(workRequestID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
 | 
					            string pageTitle = string.Empty;
 | 
				
			||||||
            // requires the controller to be inherited from MyController instead of MVC's Controller.
 | 
					            string htmlText = RenderViewToString("WorkRequestPDF", workRequest);
 | 
				
			||||||
            return this.ViewPdf("", "WorkRequestPDF", workRequest);
 | 
					            if (System.Diagnostics.Debugger.IsAttached) {
 | 
				
			||||||
 | 
					                return Content(htmlText, "text/html");
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                byte[] buffer = StandardPdfRenderer.GetPortableDocumentFormatBytes(pageTitle, htmlText);
 | 
				
			||||||
 | 
					                return new BinaryContentResult(buffer, "application/pdf");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        } catch (Exception ex) {
 | 
					        } catch (Exception ex) {
 | 
				
			||||||
            Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n DisplayWorkRequestPDF - LotTraveler\r\n" + ex.InnerException.ToString(), System.Diagnostics.EventLogEntryType.Error);
 | 
					            Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n DisplayWorkRequestPDF - LotTraveler\r\n" + ex.InnerException.ToString(), System.Diagnostics.EventLogEntryType.Error);
 | 
				
			||||||
            EventLogDMO.Add(new WinEventLog() { IssueID = workRequest.SWRNumber, UserID = @User.Identity.Name, DocumentType = "LotTravler", OperationType = "Generate PDF", Comments = ex.Message });
 | 
					            EventLogDMO.Add(new WinEventLog() { IssueID = workRequest.SWRNumber, UserID = @User.Identity.Name, DocumentType = "LotTravler", OperationType = "Generate PDF", Comments = ex.Message });
 | 
				
			||||||
@ -210,6 +216,24 @@ public class LotTravelerController : PdfViewController {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private string RenderViewToString(string viewName, object model) {
 | 
				
			||||||
 | 
					        string result;
 | 
				
			||||||
 | 
					        ViewData.Model = model;
 | 
				
			||||||
 | 
					        using (StringWriter writer = new()) {
 | 
				
			||||||
 | 
					            try {
 | 
				
			||||||
 | 
					                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);
 | 
				
			||||||
 | 
					                result = writer.GetStringBuilder().ToString();
 | 
				
			||||||
 | 
					            } catch (Exception ex) {
 | 
				
			||||||
 | 
					                result = $"Failed - {ex.Message}";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ActionResult WorkRequestRevision(int workRequestID) {
 | 
					    public ActionResult WorkRequestRevision(int workRequestID) {
 | 
				
			||||||
        int isITARCompliant = 1;
 | 
					        int isITARCompliant = 1;
 | 
				
			||||||
        LTWorkRequest workRequest = new LTWorkRequest();
 | 
					        LTWorkRequest workRequest = new LTWorkRequest();
 | 
				
			||||||
@ -251,9 +275,7 @@ public class LotTravelerController : PdfViewController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return Content("Successfully Saved");
 | 
					        return Content("Successfully Saved");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /// <summary>
 | 
					
 | 
				
			||||||
    /// 
 | 
					 | 
				
			||||||
    /// </summary>
 | 
					 | 
				
			||||||
    public JsonResult GetBaseFlowLocations(string baseFlow) {
 | 
					    public JsonResult GetBaseFlowLocations(string baseFlow) {
 | 
				
			||||||
        List<BaseFlowLocation> loclist = LotTravDMO.GetBaseFlowLocations(baseFlow);
 | 
					        List<BaseFlowLocation> loclist = LotTravDMO.GetBaseFlowLocations(baseFlow);
 | 
				
			||||||
        return Json(loclist, JsonRequestBehavior.AllowGet);
 | 
					        return Json(loclist, JsonRequestBehavior.AllowGet);
 | 
				
			||||||
@ -332,9 +354,6 @@ public class LotTravelerController : PdfViewController {
 | 
				
			|||||||
        return Content(newWorkRequestID.ToString());
 | 
					        return Content(newWorkRequestID.ToString());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// <summary>
 | 
					 | 
				
			||||||
    /// For the Revison
 | 
					 | 
				
			||||||
    /// </summary>
 | 
					 | 
				
			||||||
    public ActionResult UpdateMaterialDetailRevision(LTWorkRequest model) {
 | 
					    public ActionResult UpdateMaterialDetailRevision(LTWorkRequest model) {
 | 
				
			||||||
        var modelMaterialDetail = model.LTMaterial;
 | 
					        var modelMaterialDetail = model.LTMaterial;
 | 
				
			||||||
        int previousMaterialID = model.LTMaterial.ID;
 | 
					        int previousMaterialID = model.LTMaterial.ID;
 | 
				
			||||||
@ -1232,15 +1251,19 @@ public class LotTravelerController : PdfViewController {
 | 
				
			|||||||
        LotTravDMO.DeleteLot(ltLotID);
 | 
					        LotTravDMO.DeleteLot(ltLotID);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ///
 | 
					 | 
				
			||||||
    public ActionResult DisplayLotTravlerPdf(int ltLotID, int revisionNumber) {
 | 
					    public ActionResult DisplayLotTravlerPdf(int ltLotID, int revisionNumber) {
 | 
				
			||||||
        LotTravelerPdf traveler = new LotTravelerPdf();
 | 
					        LotTravelerPdf traveler = new LotTravelerPdf();
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            traveler = LotTravDMO.GetLotTravlerPdf(ltLotID, revisionNumber);
 | 
					            traveler = LotTravDMO.GetLotTravlerPdf(ltLotID, revisionNumber);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This
 | 
					            string pageTitle = string.Empty;
 | 
				
			||||||
            // requires the controller to be inherited from MyController instead of MVC's Controller.
 | 
					            string htmlText = RenderViewToString("LotTravelerPDF", traveler);
 | 
				
			||||||
            return this.ViewPdf("", "LotTravelerPDF", traveler);
 | 
					            if (System.Diagnostics.Debugger.IsAttached) {
 | 
				
			||||||
 | 
					                return Content(htmlText, "text/html");
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                byte[] buffer = StandardPdfRenderer.GetPortableDocumentFormatBytes(pageTitle, htmlText);
 | 
				
			||||||
 | 
					                return new BinaryContentResult(buffer, "application/pdf");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        } catch (Exception ex) {
 | 
					        } catch (Exception ex) {
 | 
				
			||||||
            EventLogDMO.Add(new WinEventLog() { IssueID = traveler.SWRNumber, UserID = @User.Identity.Name, DocumentType = "LotTraveler", OperationType = "Generate PDF", Comments = ex.Message });
 | 
					            EventLogDMO.Add(new WinEventLog() { IssueID = traveler.SWRNumber, UserID = @User.Identity.Name, DocumentType = "LotTraveler", OperationType = "Generate PDF", Comments = ex.Message });
 | 
				
			||||||
            traveler = null;
 | 
					            traveler = null;
 | 
				
			||||||
 | 
				
			|||||||
@ -325,9 +325,6 @@
 | 
				
			|||||||
    <Compile Include="Models\WinEventLogModel.cs" />
 | 
					    <Compile Include="Models\WinEventLogModel.cs" />
 | 
				
			||||||
    <Compile Include="Models\WorkFlowModels.cs" />
 | 
					    <Compile Include="Models\WorkFlowModels.cs" />
 | 
				
			||||||
    <Compile Include="PdfGenerator\BinaryContentResult.cs" />
 | 
					    <Compile Include="PdfGenerator\BinaryContentResult.cs" />
 | 
				
			||||||
    <Compile Include="PdfGenerator\FakeView.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="PdfGenerator\HtmlViewRenderer.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="PdfGenerator\PdfViewController.cs" />
 | 
					 | 
				
			||||||
    <Compile Include="PdfGenerator\PrintHeaderFooter.cs" />
 | 
					    <Compile Include="PdfGenerator\PrintHeaderFooter.cs" />
 | 
				
			||||||
    <Compile Include="PdfGenerator\StandardPdfRenderer.cs" />
 | 
					    <Compile Include="PdfGenerator\StandardPdfRenderer.cs" />
 | 
				
			||||||
    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
					    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
				
			||||||
 | 
				
			|||||||
@ -1,28 +0,0 @@
 | 
				
			|||||||
#if !NET8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// --------------------------------------------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
// <copyright file="FakeView.cs" company="SemanticArchitecture">
 | 
					 | 
				
			||||||
//   http://www.SemanticArchitecture.net pkalkie@gmail.com
 | 
					 | 
				
			||||||
// </copyright>
 | 
					 | 
				
			||||||
// <summary>
 | 
					 | 
				
			||||||
//   Defines the FakeView type.
 | 
					 | 
				
			||||||
// </summary>
 | 
					 | 
				
			||||||
// --------------------------------------------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Fab2ApprovalSystem.PdfGenerator {
 | 
					 | 
				
			||||||
    using System;
 | 
					 | 
				
			||||||
    using System.IO;
 | 
					 | 
				
			||||||
    using System.Web.Mvc;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public class FakeView : IView {
 | 
					 | 
				
			||||||
        #region IView Members
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public void Render(ViewContext viewContext, TextWriter writer) {
 | 
					 | 
				
			||||||
            throw new NotImplementedException();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        #endregion
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
@ -1,49 +0,0 @@
 | 
				
			|||||||
#if !NET8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// --------------------------------------------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
// <copyright file="HtmlViewRenderer.cs" company="SemanticArchitecture">
 | 
					 | 
				
			||||||
//   http://www.SemanticArchitecture.net pkalkie@gmail.com
 | 
					 | 
				
			||||||
// </copyright>
 | 
					 | 
				
			||||||
// <summary>
 | 
					 | 
				
			||||||
//   This class is responsible for rendering a HTML view to a string.
 | 
					 | 
				
			||||||
// </summary>
 | 
					 | 
				
			||||||
// --------------------------------------------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Fab2ApprovalSystem.PdfGenerator {
 | 
					 | 
				
			||||||
    using System.IO;
 | 
					 | 
				
			||||||
    using System.Text;
 | 
					 | 
				
			||||||
    using System.Web;
 | 
					 | 
				
			||||||
    using System.Web.Mvc;
 | 
					 | 
				
			||||||
    using System.Web.Mvc.Html;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// <summary>
 | 
					 | 
				
			||||||
    /// This class is responsible for rendering a HTML view into a string. 
 | 
					 | 
				
			||||||
    /// </summary>
 | 
					 | 
				
			||||||
    public class HtmlViewRenderer {
 | 
					 | 
				
			||||||
        public string RenderViewToString(Controller controller, string viewName, object viewData) {
 | 
					 | 
				
			||||||
            var renderedView = new StringBuilder();
 | 
					 | 
				
			||||||
            using (var responseWriter = new StringWriter(renderedView)) {
 | 
					 | 
				
			||||||
                var fakeResponse = new HttpResponse(responseWriter);
 | 
					 | 
				
			||||||
                var fakeContext = new HttpContext(HttpContext.Current.Request, fakeResponse);
 | 
					 | 
				
			||||||
                var fakeControllerContext = new ControllerContext(new HttpContextWrapper(fakeContext), controller.ControllerContext.RouteData, controller.ControllerContext.Controller);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                var oldContext = HttpContext.Current;
 | 
					 | 
				
			||||||
                HttpContext.Current = fakeContext;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                using (var viewPage = new ViewPage()) {
 | 
					 | 
				
			||||||
                    var html = new HtmlHelper(CreateViewContext(responseWriter, fakeControllerContext), viewPage);
 | 
					 | 
				
			||||||
                    html.RenderPartial(viewName, viewData);
 | 
					 | 
				
			||||||
                    HttpContext.Current = oldContext;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return renderedView.ToString();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static ViewContext CreateViewContext(TextWriter responseWriter, ControllerContext fakeControllerContext) {
 | 
					 | 
				
			||||||
            return new ViewContext(fakeControllerContext, new FakeView(), new ViewDataDictionary(), new TempDataDictionary(), responseWriter);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
@ -1,54 +0,0 @@
 | 
				
			|||||||
#if !NET8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// --------------------------------------------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
// <copyright file="PdfViewController.cs" company="SemanticArchitecture">
 | 
					 | 
				
			||||||
//   http://www.SemanticArchitecture.net pkalkie@gmail.com
 | 
					 | 
				
			||||||
// </copyright>
 | 
					 | 
				
			||||||
// <summary>
 | 
					 | 
				
			||||||
//   Extends the controller with functionality for rendering PDF views
 | 
					 | 
				
			||||||
// </summary>
 | 
					 | 
				
			||||||
// --------------------------------------------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Fab2ApprovalSystem.PdfGenerator {
 | 
					 | 
				
			||||||
    using System.Web.Mvc;
 | 
					 | 
				
			||||||
    using System.IO;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /// <summary>
 | 
					 | 
				
			||||||
    /// Extends the controller with functionality for rendering PDF views
 | 
					 | 
				
			||||||
    /// </summary>
 | 
					 | 
				
			||||||
    public class PdfViewController : Controller {
 | 
					 | 
				
			||||||
        private readonly HtmlViewRenderer htmlViewRenderer;
 | 
					 | 
				
			||||||
        private readonly StandardPdfRenderer standardPdfRenderer;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public PdfViewController() {
 | 
					 | 
				
			||||||
            this.htmlViewRenderer = new HtmlViewRenderer();
 | 
					 | 
				
			||||||
            this.standardPdfRenderer = new StandardPdfRenderer();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        protected ActionResult ViewPdf(string pageTitle, string viewName, object model) {
 | 
					 | 
				
			||||||
            // Render the view html to a string.
 | 
					 | 
				
			||||||
            string htmlText = this.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 = this.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 FileStream(fileName, FileMode.Create)) {
 | 
					 | 
				
			||||||
                fs.Write(buffer, 0, buffer.Length);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
@ -8,20 +8,34 @@ using System.IO;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Fab2ApprovalSystem.PdfGenerator;
 | 
					namespace Fab2ApprovalSystem.PdfGenerator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					 | 
				
			||||||
/// This class is responsible for rendering a html text string to a PDF document using the html renderer of iTextSharp.
 | 
					 | 
				
			||||||
/// </summary>
 | 
					 | 
				
			||||||
public class StandardPdfRenderer {
 | 
					public class StandardPdfRenderer {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private const int HorizontalMargin = 40;
 | 
					    private const int HorizontalMargin = 40;
 | 
				
			||||||
    private const int VerticalMargin = 40;
 | 
					    private const int VerticalMargin = 40;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public byte[] Render(string htmlText, string pageTitle) {
 | 
					    public static byte[] GetPortableDocumentFormatBytes(string pageTitle, string htmlText) {
 | 
				
			||||||
        byte[] renderedBuffer;
 | 
					        byte[] results;
 | 
				
			||||||
 | 
					        using (MemoryStream memoryStream = GetPortableDocumentFormat(pageTitle, htmlText)) {
 | 
				
			||||||
 | 
					            results = new byte[memoryStream.Position];
 | 
				
			||||||
 | 
					            memoryStream.Position = 0;
 | 
				
			||||||
 | 
					            memoryStream.Read(results, 0, results.Length);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return results;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        using (MemoryStream outputMemoryStream = new()) {
 | 
					    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();
 | 
				
			||||||
#if !NET8
 | 
					#if !NET8
 | 
				
			||||||
        using (Document pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin)) {
 | 
					        using (Document pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin)) {
 | 
				
			||||||
                PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, outputMemoryStream);
 | 
					            using (PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, result)) {
 | 
				
			||||||
                pdfWriter.CloseStream = false;
 | 
					                pdfWriter.CloseStream = false;
 | 
				
			||||||
                pdfWriter.PageEvent = new PrintHeaderFooter { Title = pageTitle };
 | 
					                pdfWriter.PageEvent = new PrintHeaderFooter { Title = pageTitle };
 | 
				
			||||||
                pdfDocument.Open();
 | 
					                pdfDocument.Open();
 | 
				
			||||||
@ -30,15 +44,10 @@ public class StandardPdfRenderer {
 | 
				
			|||||||
                        htmlWorker.Parse(htmlViewReader);
 | 
					                        htmlWorker.Parse(htmlViewReader);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
            renderedBuffer = new byte[outputMemoryStream.Position];
 | 
					 | 
				
			||||||
            outputMemoryStream.Position = 0;
 | 
					 | 
				
			||||||
            outputMemoryStream.Read(renderedBuffer, 0, renderedBuffer.Length);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return renderedBuffer;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1,4 +1,18 @@
 | 
				
			|||||||
@model Fab2ApprovalSystem.ViewModels.ECNPdf
 | 
					@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%;">
 | 
					    <table style="width:100%;">
 | 
				
			||||||
        <tr>
 | 
					        <tr>
 | 
				
			||||||
            <td>
 | 
					            <td>
 | 
				
			||||||
@ -107,7 +121,6 @@
 | 
				
			|||||||
                            </table>
 | 
					                            </table>
 | 
				
			||||||
                        </td>
 | 
					                        </td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                </table>
 | 
					                </table>
 | 
				
			||||||
            </td>
 | 
					            </td>
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
@ -227,7 +240,6 @@
 | 
				
			|||||||
                        </td>
 | 
					                        </td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
                </table>
 | 
					                </table>
 | 
				
			||||||
            </td>
 | 
					            </td>
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
@ -254,35 +266,6 @@
 | 
				
			|||||||
                </table>
 | 
					                </table>
 | 
				
			||||||
            </td>
 | 
					            </td>
 | 
				
			||||||
        </tr>
 | 
					        </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>
 | 
					        <tr>
 | 
				
			||||||
            <td>
 | 
					            <td>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -338,10 +321,8 @@
 | 
				
			|||||||
                            </font>
 | 
					                            </font>
 | 
				
			||||||
                        </td>
 | 
					                        </td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                </table>
 | 
					                </table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
            </td>
 | 
					            </td>
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
        <tr>
 | 
					        <tr>
 | 
				
			||||||
@ -349,7 +330,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                <table border="1">
 | 
					                <table border="1">
 | 
				
			||||||
                    <tr bgcolor="#c4baba" color="#000000">
 | 
					                    <tr bgcolor="#c4baba" color="#000000">
 | 
				
			||||||
                    <td colspan="5">Training Notification</td>
 | 
					                        <td colspan="1">Training Notification</td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
                    <tr style="display:block;">
 | 
					                    <tr style="display:block;">
 | 
				
			||||||
                        <td>
 | 
					                        <td>
 | 
				
			||||||
@ -367,10 +348,8 @@
 | 
				
			|||||||
                            </font>
 | 
					                            </font>
 | 
				
			||||||
                        </td>
 | 
					                        </td>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                </table>
 | 
					                </table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
            </td>
 | 
					            </td>
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
        <tr>
 | 
					        <tr>
 | 
				
			||||||
@ -517,19 +496,11 @@
 | 
				
			|||||||
                        </tr>
 | 
					                        </tr>
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
                </table>
 | 
					                </table>
 | 
				
			||||||
            </td>
 | 
					            </td>
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </table>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</table> <!--main table -->
 | 
					</html>
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user