From 0b48ec643ea0042415335462a429ea0b62cb5631 Mon Sep 17 00:00:00 2001 From: Rich Date: Thu, 9 Feb 2012 16:14:36 +0000 Subject: [PATCH] Added new settings to control conversion of approved data Added event handler for viewing version pdfs and summary reports added constructor to lookup based on file added method to get library document by original file name fixed ConvertToDisplayText to support RO tables in approved folder added vlnTreeViewPdfEvent delegate added vlnTreeViewPdfArgs class added ViewPDF event only display menu item if pdf or summary pdf exists determined if pdf should have superceded watermark added added sorting of consistency check report by procedure number added method to add superceded watermark to old version pdf files commented out approved folders --- .../Properties/Settings.Designer.cs | 24 ++++ PROMS/DataLoader/Properties/Settings.settings | 6 + PROMS/VEPROMS User Interface/frmVEPROMS.cs | 15 +++ .../Config/ROFSTLookup.cs | 13 ++ .../Extension/DocumentExt.cs | 58 +++++++++ .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 1 + PROMS/Volian.Controls.Library/vlnTreeView.cs | 118 +++++++++++++----- .../PDFConsistencyCheckReport.cs | 9 +- PROMS/Volian.Print.Library/PromsPrinter.cs | 34 +++++ .../vlnObject/vlnControl.xml | 4 +- 10 files changed, 250 insertions(+), 32 deletions(-) diff --git a/PROMS/DataLoader/Properties/Settings.Designer.cs b/PROMS/DataLoader/Properties/Settings.Designer.cs index 564d3ec5..c29c2bc8 100644 --- a/PROMS/DataLoader/Properties/Settings.Designer.cs +++ b/PROMS/DataLoader/Properties/Settings.Designer.cs @@ -310,5 +310,29 @@ namespace DataLoader.Properties { this["GenMacFolder"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool LoadApproved { + get { + return ((bool)(this["LoadApproved"])); + } + set { + this["LoadApproved"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Phase4")] + public string Phase4 { + get { + return ((string)(this["Phase4"])); + } + set { + this["Phase4"] = value; + } + } } } diff --git a/PROMS/DataLoader/Properties/Settings.settings b/PROMS/DataLoader/Properties/Settings.settings index aa0e3e2c..f6e15f4b 100644 --- a/PROMS/DataLoader/Properties/Settings.settings +++ b/PROMS/DataLoader/Properties/Settings.settings @@ -74,5 +74,11 @@ c:\development\genmacall + + False + + + Phase4 + \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 97e92f54..898cc2b3 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -18,6 +18,7 @@ using VEPROMS.Properties; using Volian.Controls.Library; using DescriptiveEnum; using Volian.Base.Library; +using Volian.Print.Library; [assembly: log4net.Config.XmlConfigurator(Watch = true)] @@ -209,6 +210,20 @@ namespace VEPROMS tv.ApproveAllProcedures += new vlnTreeViewEvent(tv_ApproveAllProcedures); tv.ApproveSomeProcedures += new vlnTreeViewEvent(tv_ApproveSomeProcedures); tv.ReportAllProceduresInconsistencies += new vlnTreeViewEvent(tv_ReportAllProceduresInconsistencies); + tv.ViewPDF += new vlnTreeViewPdfEvent(tv_ViewPDF); + } + + void tv_ViewPDF(object sender, vlnTreeViewPdfArgs args) + { + byte[] buffer; + if (args.MyWatermark != string.Empty) + buffer = PromsPrinter.WatermarkPDF(args.MyBuffer, args.MyWatermark); + else + buffer = args.MyBuffer; + FileStream fs = new FileStream(args.MyFilename, FileMode.Create); + fs.Write(buffer, 0, buffer.Length); + fs.Close(); + System.Diagnostics.Process.Start(args.MyFilename); } void displayHistory_AnnotationRestored(AnnotationInfo restoredAnnotationInfo, ItemInfo currentItem) diff --git a/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs b/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs index 28b3eac8..0b0e5987 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/ROFSTLookup.cs @@ -4,6 +4,7 @@ using System.Collections.Specialized; using System.Text; using System.ComponentModel; using System.Text.RegularExpressions; +using System.IO; namespace VEPROMS.CSLA.Library { @@ -110,6 +111,18 @@ namespace VEPROMS.CSLA.Library _DocVersionInfo = _ROFstInfo.docVer==null?null: DocVersionInfo.Get(_ROFstInfo.docVer.VersionID); ParseIntoDictionary(rofstinfo.ROLookup); } + public ROFSTLookup(string filePath) + { + _ROFstInfo = null; + _ROFst = null; + _DocVersionInfo = null; + FileInfo rofstFile = new FileInfo(filePath); + FileStream fs = rofstFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + byte[] buf = new byte[rofstFile.Length]; + fs.Read(buf, 0, buf.Length); + fs.Close(); + ParseIntoDictionary(buf); + } #endregion #region PropertiesAndData public roHdr myHdr; diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs index d1a9d5d8..7af6da05 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DocumentExt.cs @@ -130,6 +130,64 @@ namespace VEPROMS.CSLA.Library _DocumentConfig = null; } #endregion + public static DocumentInfo GetByLibDocName(string libdoc, int versionID) + { + try + { + DocumentInfo tmp = DataPortal.Fetch(new LibDocCriteria(libdoc, versionID)); + return tmp; + } + catch (Exception ex) + { + throw new DbCslaException("Error on DocumentInfo.GetByLibDocName", ex); + } + } + [Serializable()] + protected class LibDocCriteria + { + private string _LibDoc; + public string LibDoc + { get { return _LibDoc; } } + private int _VersionID; + public int VersionID + { get { return _VersionID; } } + public LibDocCriteria(string libdoc, int versionid) + { + _LibDoc = libdoc; + _VersionID = versionid; + } + } + private void DataPortal_Fetch(LibDocCriteria criteria) + { + if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] DocumentInfo.DataPortal_Fetch", GetHashCode()); + try + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandText = "getDocumentByLibDoc"; + cm.Parameters.AddWithValue("@LibDoc", criteria.LibDoc); + cm.Parameters.AddWithValue("@VersionID", criteria.VersionID); + using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) + { + if (!dr.Read()) + { + _ErrorMessage = "No Record Found"; + return; + } + ReadData(dr); + } + } + } + } + catch (Exception ex) + { + if (_MyLog.IsErrorEnabled) _MyLog.Error("DocumentInfo.DataPortal_Fetch", ex); + throw new DbCslaException("DocumentInfo.DataPortal_Fetch", ex); + } + } } public partial class DocumentInfoList diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index 46966861..b0337ba3 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -1302,6 +1302,7 @@ namespace VEPROMS.CSLA.Library retval = ReplaceSpecialCharacters(retval); retval = retval.Replace("\u2011","-"); retval = retval.Replace("\r\n", ";"); + retval = retval.Replace("\n", ";"); //added for consistency checking with approved version return retval; } public static string StripRtfFormatting(string rtf) diff --git a/PROMS/Volian.Controls.Library/vlnTreeView.cs b/PROMS/Volian.Controls.Library/vlnTreeView.cs index 5f0e078d..ad9250f1 100644 --- a/PROMS/Volian.Controls.Library/vlnTreeView.cs +++ b/PROMS/Volian.Controls.Library/vlnTreeView.cs @@ -28,6 +28,7 @@ namespace Volian.Controls.Library public delegate DialogResult vlnTreeViewPSIEvent(object sender, vlnTreeEventArgs args); public delegate void vlnTreeViewSectionInfoEvent(object sender, vlnTreeSectionInfoEventArgs args); public delegate void WordSectionDeletedEvent(object sender, WordSectionEventArgs args); + public delegate void vlnTreeViewPdfEvent(object sender, vlnTreeViewPdfArgs args); public partial class vlnTreeSectionInfoEventArgs { private bool _IsDeleting = false; @@ -52,6 +53,33 @@ namespace Volian.Controls.Library _IsDeleting = isDeleting; } } + public partial class vlnTreeViewPdfArgs + { + private string _MyFilename; + public string MyFilename + { + get { return _MyFilename; } + set { _MyFilename = value; } + } + private byte[] _MyBuffer; + public byte[] MyBuffer + { + get { return _MyBuffer; } + set { _MyBuffer = value; } + } + private string _MyWatermark; + public string MyWatermark + { + get { return _MyWatermark; } + set { _MyWatermark = value; } + } + public vlnTreeViewPdfArgs(string filename, byte[] buffer, string watermark) + { + _MyFilename = filename; + _MyBuffer = buffer; + _MyWatermark = watermark; + } + } public partial class vlnTreeEventArgs { #region Business Methods @@ -277,6 +305,11 @@ namespace Volian.Controls.Library ItemInfo _LastItemInfo = null; #endregion #region Events + public event vlnTreeViewPdfEvent ViewPDF; + private void OnViewPDF(object sender, vlnTreeViewPdfArgs args) + { + if (ViewPDF != null) ViewPDF(sender, args); + } public event vlnTreeViewItemInfoDeleteEvent DeleteItemInfo; private bool OnDeleteItemInfo(object sender, vlnTreeItemInfoEventArgs args) { @@ -549,56 +582,83 @@ namespace Volian.Controls.Library RevisionInfoList ril = RevisionInfoList.GetByItemID(pri.ItemID); if (ril.Count == 0) return; MenuItem mi = menuItemCollection.Add("Versions"); + int lastApprovedRevisionID = 0; foreach (RevisionInfo ri in ril) { MenuItem mir = mi.MenuItems.Add(ri.ToString()); mir.Tag = ri; - mir.Click += new EventHandler(ApprovedRevision_Click); + if (ri.LatestVersion.MyStage.IsApproved > 0 && (ri.RevisionID > lastApprovedRevisionID)) + lastApprovedRevisionID = ri.RevisionID; + //mir.Click += new EventHandler(ApprovedRevision_Click); //added jcb 20111031 - MenuItem mirp = mir.MenuItems.Add("View Procedure"); - mirp.Tag = ri; - mirp.Click += new EventHandler(ApprovedRevision_Click); - MenuItem mirs = mir.MenuItems.Add("View Summary of Changes"); - mirs.Tag = ri; - mirs.Click += new EventHandler(SummaryOfChanges_Click); + if (ri.LatestVersion.PDF != null) + { + MenuItem mirp = mir.MenuItems.Add("View Procedure"); + mirp.Tag = ri; + mirp.Click += new EventHandler(ApprovedRevision_Click); + } + if (ri.LatestVersion.SummaryPDF != null) + { + MenuItem mirs = mir.MenuItems.Add("View Summary of Changes"); + mirs.Tag = ri; + mirs.Click += new EventHandler(SummaryOfChanges_Click); + } //end added jcb 20111031 + mi.Tag = lastApprovedRevisionID; } } void ApprovedRevision_Click(object sender, EventArgs e) { + bool superceded = false; MenuItem mi = sender as MenuItem; if (mi == null) return; RevisionInfo ri = mi.Tag as RevisionInfo; - System.Diagnostics.Process pp = System.Diagnostics.Process.Start(GetDocPdf(ri)); + { + MenuItem mip = mi.Parent as MenuItem; + if (ri.RevisionID < int.Parse(mip.Parent.Tag.ToString())) + superceded = true; + } + vlnTreeViewPdfArgs args = new vlnTreeViewPdfArgs(Volian.Base.Library.TmpFile.CreateFileName(ItemInfo.Get(ri.ItemID).DisplayNumber), ri.LatestVersion.PDF, superceded ? "Superceded" : ""); + OnViewPDF(sender, args); +// System.Diagnostics.Process pp = System.Diagnostics.Process.Start(GetDocPdf(ri, superceded)); } void SummaryOfChanges_Click(object sender, EventArgs e) { MenuItem mi = sender as MenuItem; if (mi == null) return; RevisionInfo ri = mi.Tag as RevisionInfo; - System.Diagnostics.Process pps = System.Diagnostics.Process.Start(GetDocSummaryPdf(ri)); - } - private string GetDocPdf(RevisionInfo ri) - { - string fileName = Volian.Base.Library.TmpFile.CreateFileName(ItemInfo.Get(ri.ItemID).DisplayNumber); - FileInfo fi = new FileInfo(VlnSettings.TemporaryFolder + @"\" + fileName); - FileStream fs = fi.Create(); - byte[] myPdf = ri.LatestVersion.PDF; - if (myPdf != null) fs.Write(myPdf, 0, myPdf.Length); - fs.Close(); - return VlnSettings.TemporaryFolder + @"\" + fileName; - } - private string GetDocSummaryPdf(RevisionInfo ri) - { - string fileName = Volian.Base.Library.TmpFile.CreateFileName(ItemInfo.Get(ri.ItemID).DisplayNumber + " Summary of Changes"); - FileInfo fi = new FileInfo(VlnSettings.TemporaryFolder + @"\" + fileName); - FileStream fs = fi.Create(); - byte[] myPdf = ri.LatestVersion.SummaryPDF; - if (myPdf != null) fs.Write(myPdf, 0, myPdf.Length); - fs.Close(); - return VlnSettings.TemporaryFolder + @"\" + fileName; + vlnTreeViewPdfArgs args = new vlnTreeViewPdfArgs(Volian.Base.Library.TmpFile.CreateFileName(ItemInfo.Get(ri.ItemID).DisplayNumber + " Summary of Changes"), ri.LatestVersion.SummaryPDF, ""); + OnViewPDF(sender, args); + // System.Diagnostics.Process pps = System.Diagnostics.Process.Start(GetDocSummaryPdf(ri)); } + //private string GetDocPdf(RevisionInfo ri, bool superceded) + //{ + // string fileName = Volian.Base.Library.TmpFile.CreateFileName(ItemInfo.Get(ri.ItemID).DisplayNumber); + // FileInfo fi = new FileInfo(VlnSettings.TemporaryFolder + @"\" + fileName); + // FileStream fs = fi.Create(); + // byte[] myPdf = ri.LatestVersion.PDF; + // if (myPdf != null) fs.Write(myPdf, 0, myPdf.Length); + // fs.Close(); + // if (superceded) + // AddSupercededWatermark(VlnSettings.TemporaryFolder + @"\" + fileName); + // return VlnSettings.TemporaryFolder + @"\" + fileName; + //} + + //private void AddSupercededWatermark(string p) + //{ + // MessageBox.Show("superceded"); + //} + //private string GetDocSummaryPdf(RevisionInfo ri) + //{ + // string fileName = Volian.Base.Library.TmpFile.CreateFileName(ItemInfo.Get(ri.ItemID).DisplayNumber + " Summary of Changes"); + // FileInfo fi = new FileInfo(VlnSettings.TemporaryFolder + @"\" + fileName); + // FileStream fs = fi.Create(); + // byte[] myPdf = ri.LatestVersion.SummaryPDF; + // if (myPdf != null) fs.Write(myPdf, 0, myPdf.Length); + // fs.Close(); + // return VlnSettings.TemporaryFolder + @"\" + fileName; + //} private bool AddToInsertMenu(ItemInfo ii, int ba) // 0 = before, 1 = after diff --git a/PROMS/Volian.Print.Library/PDFConsistencyCheckReport.cs b/PROMS/Volian.Print.Library/PDFConsistencyCheckReport.cs index 00c797de..63673c84 100644 --- a/PROMS/Volian.Print.Library/PDFConsistencyCheckReport.cs +++ b/PROMS/Volian.Print.Library/PDFConsistencyCheckReport.cs @@ -134,7 +134,14 @@ namespace Volian.Print.Library PdfPTable t = CreatePdfPTable(cols); CreatePageHeader(t, f1, f4, cols, paddingBottom, "Approval Consistency Report", "Procedures currently selected to be approved"); //more stuff - foreach (ProcedureInfo pi in MyItemInfoList) + /* + Csla.SortedBindingList sortedResults = new Csla.SortedBindingList(_SearchResults); + sortedResults.ApplySort(_DisplayMember, ListSortDirection.Ascending); + lbSrchResults.DataSource = sortedResults; + */ + Csla.SortedBindingList sortedProcs = new Csla.SortedBindingList(MyItemInfoList); + sortedProcs.ApplySort("DisplayNumber", System.ComponentModel.ListSortDirection.Ascending); + foreach (ProcedureInfo pi in sortedProcs) { if (pi.IsSelected) { diff --git a/PROMS/Volian.Print.Library/PromsPrinter.cs b/PROMS/Volian.Print.Library/PromsPrinter.cs index 18f9f926..81ee712f 100644 --- a/PROMS/Volian.Print.Library/PromsPrinter.cs +++ b/PROMS/Volian.Print.Library/PromsPrinter.cs @@ -676,5 +676,39 @@ namespace Volian.Print.Library myPageHelper.MySection = saveSect; myPageHelper.OnFoldoutPage = false; } + public static byte[] WatermarkPDF(byte[] buffer, string watermark) + { + PdfReader reader = new PdfReader(buffer); + MemoryStream ms = new MemoryStream(); + PdfStamper stamper = new PdfStamper(reader, ms); + PdfLayer layer = new PdfLayer("Watermark", stamper.Writer); + layer.SetPrint("Print", true); + for (int i = 1; i <= reader.NumberOfPages; i++) + { + PdfContentByte cb = stamper.GetUnderContent(i); + cb.SaveState(); + cb.BeginLayer(layer); + SvgWatermark wm = new SvgWatermark(cb, watermark, System.Drawing.Color.Blue, .15F); + wm.SetSquareDotPattern(.7F); + //wm.SetTextPattern(8, 3); + //wm.SetTextPattern2(8); + //wm.SetHashPattern(1, 6); + //wm.SetDotPattern(5, 2); + wm.Draw(); + cb.EndLayer(); + cb.RestoreState(); + } + stamper.Close(); + /* + cb.SaveState(); + if (_WatermarkLayer != null) cb.BeginLayer(_WatermarkLayer); + SvgWatermark myWatermark = new SvgWatermark(cb, Watermark, System.Drawing.Color.Blue, .15F); + myWatermark.SetSquareDotPattern(.7F); + myWatermark.Draw(); + if (_WatermarkLayer != null) cb.EndLayer(); + cb.RestoreState(); + */ + return ms.ToArray(); + } } } diff --git a/PROMS/Volian.Utils.Library/vlnObject/vlnControl.xml b/PROMS/Volian.Utils.Library/vlnObject/vlnControl.xml index fc0d37cb..44fc9861 100644 --- a/PROMS/Volian.Utils.Library/vlnObject/vlnControl.xml +++ b/PROMS/Volian.Utils.Library/vlnObject/vlnControl.xml @@ -150,10 +150,10 @@ child="version"> - + - +