From c0ac3259114bf5fed9cdfe04cf2e0e61347bafd5 Mon Sep 17 00:00:00 2001 From: John Jenko Date: Thu, 4 Sep 2025 14:38:26 -0400 Subject: [PATCH] C2025-017 Added an option to print (generate) all of the current Approved versions of PDFs and place them in a user specified folder --- .../VEPROMS User Interface/VEPROMS_UI.csproj | 9 + .../dlgPrintAllApprovedProcedures.Designer.cs | 136 ++++++++++++ .../dlgPrintAllApprovedProcedures.cs | 202 ++++++++++++++++++ .../dlgPrintAllApprovedProcedures.resx | 141 ++++++++++++ PROMS/VEPROMS User Interface/frmVEPROMS.cs | 24 ++- PROMS/Volian.Controls.Library/vlnTreeView.cs | 26 ++- 6 files changed, 527 insertions(+), 11 deletions(-) create mode 100644 PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.Designer.cs create mode 100644 PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.cs create mode 100644 PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx diff --git a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj index 9022df4b..6b6a4249 100644 --- a/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj +++ b/PROMS/VEPROMS User Interface/VEPROMS_UI.csproj @@ -224,6 +224,12 @@ dlgPickROFolder.cs + + Form + + + dlgPrintAllApprovedProcedures.cs + Form @@ -359,6 +365,9 @@ dlgImpHowToHandleROs.cs + + dlgPrintAllApprovedProcedures.cs + DlgPrintProcedure.cs Designer diff --git a/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.Designer.cs b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.Designer.cs new file mode 100644 index 00000000..9a7f3063 --- /dev/null +++ b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.Designer.cs @@ -0,0 +1,136 @@ + +namespace VEPROMS +{ + partial class dlgPrintAllApprovedProcedures + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(dlgPrintAllApprovedProcedures)); + this.txbApprovedPDFsPath = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelX1 = new DevComponents.DotNetBar.LabelX(); + this.ppBtnPDFLoc = new DevComponents.DotNetBar.ButtonX(); + this.ApprovedPDFsFolderDlg = new System.Windows.Forms.FolderBrowserDialog(); + this.btnPrntAllAprv = new DevComponents.DotNetBar.ButtonX(); + this.btnCancel = new DevComponents.DotNetBar.ButtonX(); + this.SuspendLayout(); + // + // txbApprovedPDFsPath + // + // + // + // + this.txbApprovedPDFsPath.Border.Class = "TextBoxBorder"; + this.txbApprovedPDFsPath.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txbApprovedPDFsPath.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txbApprovedPDFsPath.Location = new System.Drawing.Point(11, 45); + this.txbApprovedPDFsPath.Name = "txbApprovedPDFsPath"; + this.txbApprovedPDFsPath.PreventEnterBeep = true; + this.txbApprovedPDFsPath.Size = new System.Drawing.Size(611, 22); + this.txbApprovedPDFsPath.TabIndex = 0; + this.txbApprovedPDFsPath.WatermarkText = "Enter to Path of where to Place All Approved PDFs"; + this.txbApprovedPDFsPath.TextChanged += new System.EventHandler(this.txbApprovedPDFsPath_TextChanged); + // + // labelX1 + // + // + // + // + this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.labelX1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelX1.Location = new System.Drawing.Point(12, 22); + this.labelX1.Name = "labelX1"; + this.labelX1.Size = new System.Drawing.Size(360, 23); + this.labelX1.TabIndex = 1; + this.labelX1.Text = "Approved PDFs Location:"; + // + // ppBtnPDFLoc + // + this.ppBtnPDFLoc.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.ppBtnPDFLoc.Image = ((System.Drawing.Image)(resources.GetObject("ppBtnPDFLoc.Image"))); + this.ppBtnPDFLoc.Location = new System.Drawing.Point(627, 45); + this.ppBtnPDFLoc.Margin = new System.Windows.Forms.Padding(2); + this.ppBtnPDFLoc.Name = "ppBtnPDFLoc"; + this.ppBtnPDFLoc.Size = new System.Drawing.Size(37, 22); + this.ppBtnPDFLoc.TabIndex = 32; + this.ppBtnPDFLoc.Click += new System.EventHandler(this.ppBtnPDFLoc_Click); + // + // btnPrntAllAprv + // + this.btnPrntAllAprv.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnPrntAllAprv.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnPrntAllAprv.Enabled = false; + this.btnPrntAllAprv.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnPrntAllAprv.Location = new System.Drawing.Point(397, 120); + this.btnPrntAllAprv.Name = "btnPrntAllAprv"; + this.btnPrntAllAprv.Size = new System.Drawing.Size(132, 26); + this.btnPrntAllAprv.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnPrntAllAprv.TabIndex = 33; + this.btnPrntAllAprv.Text = "Print All Approved"; + this.btnPrntAllAprv.Click += new System.EventHandler(this.btnPrntAllAprv_Click); + // + // btnCancel + // + this.btnCancel.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.btnCancel.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground; + this.btnCancel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnCancel.Location = new System.Drawing.Point(564, 120); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(99, 26); + this.btnCancel.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnCancel.TabIndex = 34; + this.btnCancel.Text = "Close"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // dlgPrintAllApprovedProcedures + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(675, 161); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnPrntAllAprv); + this.Controls.Add(this.ppBtnPDFLoc); + this.Controls.Add(this.labelX1); + this.Controls.Add(this.txbApprovedPDFsPath); + this.Cursor = System.Windows.Forms.Cursors.Default; + this.DoubleBuffered = true; + this.Name = "dlgPrintAllApprovedProcedures"; + this.ShowIcon = false; + this.Text = "Print All Approved Procedures"; + this.ResumeLayout(false); + + } + + #endregion + + private DevComponents.DotNetBar.Controls.TextBoxX txbApprovedPDFsPath; + private DevComponents.DotNetBar.LabelX labelX1; + private DevComponents.DotNetBar.ButtonX ppBtnPDFLoc; + private System.Windows.Forms.FolderBrowserDialog ApprovedPDFsFolderDlg; + private DevComponents.DotNetBar.ButtonX btnPrntAllAprv; + private DevComponents.DotNetBar.ButtonX btnCancel; + } +} \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.cs b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.cs new file mode 100644 index 00000000..1ad0e58b --- /dev/null +++ b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.cs @@ -0,0 +1,202 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.IO; +using VEPROMS.CSLA.Library; +using JR.Utils.GUI.Forms; + +namespace VEPROMS +{ + public partial class dlgPrintAllApprovedProcedures : DevComponents.DotNetBar.Office2007Form + { + private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + private StringBuilder NotApproved; + private DocVersionInfo _DocVersionInfo = null; + private int unitId = 0; + public dlgPrintAllApprovedProcedures(DocVersionInfo dvi) + { + InitializeComponent(); + _DocVersionInfo = dvi; + unitId = (_DocVersionInfo.DocVersionConfig.SelectedSlave < 0) ? 0 : _DocVersionInfo.DocVersionConfig.SelectedSlave; // set unitId to zero if not Parent/Child + NotApproved = new StringBuilder(); + txbApprovedPDFsPath.Text = BuildInitialPDFPath(); // set to default approved PDF path + } + // create an approved PDFs path based on the user's Documents folder and the tree path to the working draft + private string BuildInitialPDFPath() + { + // start with the SearchDVPath which is the node path staring with the top of the PROMS Procedure tree (VEPROMS) + string rtnstr = _DocVersionInfo.ActiveParent.SearchDVPath; + + // remove top tree node (VEPROMS) and put a " - " between each tree node name + rtnstr = rtnstr.Substring(rtnstr.IndexOf("\a") + 1).Replace("\a", " - "); + + // add the user's path to the My Documments folder to the start of the path + rtnstr = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\" + rtnstr; + + // check if we are printing Approved Child Procedures + // if SelectedSlave is > 0 then we are printing Approved Child Procedures and + // subtract one from the index (unitId) into the list of child names (UnitNames) + if (unitId > 0) + rtnstr += "\\" + _DocVersionInfo.UnitNames[unitId - 1]; // append Child name to path + return rtnstr; + } + + private void ppBtnPDFLoc_Click(object sender, EventArgs e) + { + if (txbApprovedPDFsPath.Text.Length > 0) + ApprovedPDFsFolderDlg.SelectedPath = txbApprovedPDFsPath.Text; + DialogResult dr = ApprovedPDFsFolderDlg.ShowDialog(); + if (dr == DialogResult.OK) + { + txbApprovedPDFsPath.Text = ApprovedPDFsFolderDlg.SelectedPath; + } + } + + private bool FolderIsWritable(string dirPath) + { + try + { + using (FileStream fs = File.Create(Path.Combine(dirPath, Path.GetRandomFileName()), 1, FileOptions.DeleteOnClose)) + { } + return true; + } + catch + { + return false; + } + } + + private void btnPrntAllAprv_Click(object sender, EventArgs e) + { + try + { + // Create folder if needed, clear the folder + if (!Directory.Exists(txbApprovedPDFsPath.Text)) + Directory.CreateDirectory(txbApprovedPDFsPath.Text); + + // check if the folder location is writable + if (!FolderIsWritable(txbApprovedPDFsPath.Text)) + { + MessageBox.Show("Cannot Write to this folder.\n\nSelect a different location.", "Invalid Folder Access", MessageBoxButtons.OK, MessageBoxIcon.Error); + btnPrntAllAprv.Enabled = false; + } + else + { + int pdfCount = 0; + DeleteExistingPDFs(); // delete existing PDFs in the target folder + // Get the Child index for Parent/Child procedure - if not Parent/Child this will be zero + foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures) + { + RevisionInfoList ril = RevisionInfoList.GetByItemID(myProc.ItemID); + if (ril.Count == 0) + { + NotApproved.AppendLine(string.Format("No approved Version for {0}", (myProc.PDFNumber.Length > 0) ? myProc.PDFNumber : myProc.DisplayText)); + } + else + { + bool foundApproved = false; + foreach (RevisionInfo revinfo in ril) + { + // if not Parent/Child, "unitId" and "Applicability_index" will be zero + if (unitId == revinfo.MyConfig.Applicability_Index) + { + if (revinfo.LatestVersion.MyStage.IsApproved > 0) + { + foundApproved = true; + ItemInfo ii = ItemInfo.Get(revinfo.ItemID); + ii.MyDocVersion.DocVersionConfig.SelectedSlave = unitId; + ProcedureInfo prcInfo = ProcedureInfo.Get(ii.ItemID); + SaveApprovedPDFToFolder(revinfo, prcInfo.PDFNumber);// save PDF to folder + pdfCount++; + break; // got the latest Approved - jump out of foreach revision info loop + } + } + } + if (!foundApproved) NotApproved.AppendLine(string.Format("No approved Version for {0}", myProc.PDFNumber)); + + } + } + // if no Approved PDFs were save, display general message and exit + if (pdfCount == 0) + { + string msg = "There are no Approved Procedure PDFs in this procedure set.\n\n Approved Procedures PDFs are created when a procedure is approved using the PROMS Approval function."; + FlexibleMessageBox.Show(msg, "Print PDFs Completed", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + else // we saved some approved PDFs tell user how many were saved and list procedures that were not approved + { + string msg = string.Format("{0} PDFs were saved at\n\n{1}", pdfCount, txbApprovedPDFsPath.Text); + if (NotApproved.Length > 0) + { + msg += string.Format("\n\n--------------------------------------------\n\nPDFs for the Following were not Generated:\n\n{0}", NotApproved.ToString()); + } + FlexibleMessageBox.Show(msg, "Print PDFs Completed", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + catch (Exception ex) + { + _MyLog.Error("Print All Approved PDFs", ex);// save error in PROMS error log + MessageBox.Show(ex.Message, ex.GetType().FullName, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + this.Close(); // close dialog + } + private void SaveApprovedPDFToFolder(RevisionInfo revInfo,string PDFName) + { + byte[] buffer = revInfo.LatestVersion.PDF; + string PDFFilePath = string.Format("{0}\\{1}.PDF", txbApprovedPDFsPath.Text, PDFName); + try + { + FileStream fs = new FileStream(PDFFilePath, FileMode.Create); + fs.Write(buffer, 0, buffer.Length); + fs.Close(); + } + catch (Exception ex) + { + string str = string.Format("Could not create {0}", PDFFilePath); + NotApproved.AppendLine(str); // save to list of procedure that were not approved + _MyLog.Info(str, ex);// save error in PROMS error log + } + + } + private void DeleteExistingPDFs() + { + DirectoryInfo di = new DirectoryInfo(txbApprovedPDFsPath.Text); + FileInfo[] fis; + //DirectoryInfo[] diAry = di.GetDirectories(txbApprovedPDFsPath.Text); + //DirectoryInfo di_fmtgen; + // remove all of the PDF fils + //di_fmtgen = diAry[0]; + try + { + fis = di.GetFiles("*.pdf"); + foreach (FileInfo fi in fis) + { + if (fi.IsReadOnly) fi.IsReadOnly = false; + fi.Delete(); + } + } + catch (Exception ex) + { + string str = string.Format("Cannot delete files in {0}", txbApprovedPDFsPath.Text); + MessageBox.Show(str, "Error deleting files", MessageBoxButtons.OK, MessageBoxIcon.Error); + _MyLog.Info(str, ex); // save error in PROMS error log + + } + } + private void txbApprovedPDFsPath_TextChanged(object sender, EventArgs e) + { + btnPrntAllAprv.Enabled = txbApprovedPDFsPath.Text.Length > 0; + } + + private void btnCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx new file mode 100644 index 00000000..6d737aca --- /dev/null +++ b/PROMS/VEPROMS User Interface/dlgPrintAllApprovedProcedures.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAACc0lE + QVQ4T6WSWUjUURSH/w899GSRGoVgZIlYIAaGVA8hSouaUm6FkiaUWyWGYq7NuM7oLI46pWLOqNOoo5Wl + GFYIhSIRWi6UmJoFhaWYGiq5feFIg9tL9fDBvYf7+ziccwVA+B82FDYjs1DnKlbpuSktJ1ttIEmmTf4r + QUisGp8IedDy+VpCmWWaSk9chsYvOLYQoU6nDKjTKVlPU41Evl70h8ikojO+UXK8I/KMAvq7tcxO1Br5 + Na5nflSDoVxOvS4jbX14GZ9IBd7hKjzDChBqKxTMjFetCS+OFDHfG0NVmZTK4iw0hWmU5KVyR5ZIgSSe + 1TKhWpvLzHetKbw0UgT9idAbtikbBPdKJfz8WmIKN9flGnliyKFBL+FhZRYGTTr6EjHl6lvcVSVTrEhE + nZtglAmVJVlMfco3tj3UKqK+SsHikBiGM9byUQyDSdAXC++i6KrxJzrUq0LQqNOZHJDCZxmPquW0P5Wt + PFrd+ttg6PBloc2D2WcufKhw4OrFk5PRoV4HhVKViB/vxQy3pVCvl7E0KIKe8JVgVyh0nGeh3YvZlhNM + NR1jrO4Q4ghbLrhZ5BlnUKRIYaw7gfu6XDpfSqEvBnouQ2cQS6/OMvfiNNPNxxmvd+JbtT0dmdsJ9LDB + yc7MzihQ5yTS05LKA10ODKTCm2B47cdcqyfTz12YaHBm1ODAF+1+emXmiML24XjAqtG0hfzseGrLpfQ+ + jqRDKZhol22hRbKVxrRt1CRboom34vaNPQS6711ydrR2NwmUGXEoRVfITggh6XrA8mS55O/GuVNHcD3q + wGEHW+xtrLDebcHOHWbsMjdb+w9WX/6F370P0Tty1Sp4AAAAAElFTkSuQmCC + + + + 17, 17 + + \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index aef07dd5..732c68a3 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -534,6 +534,7 @@ namespace VEPROMS tv.QPrintSection += new vlnTreeViewEvent(tv_QPrintSection); tv.QPrintProcedure += new vlnTreeViewEvent(tv_QPrintProcedure); tv.PrintAllProcedures += new vlnTreeViewEvent(tv_PrintAllProcedures); + tv.PrintAllApprovedProcedures += new vlnTreeViewEvent(tv_PrintAllApprovedProcedures); tv.ApproveProcedure += new vlnTreeViewEvent(tv_ApproveProcedure); tv.ApproveAllProcedures += new vlnTreeViewEvent(tv_ApproveAllProcedures); tv.ApproveSomeProcedures += new vlnTreeViewEvent(tv_ApproveSomeProcedures); @@ -1212,7 +1213,27 @@ namespace VEPROMS dvi.DocVersionConfig.SelectedSlave = 0; } - + + // C2025-017 print all approved procedure to a specified folder + void tv_PrintAllApprovedProcedures(object sender, vlnTreeEventArgs args) + { + using (DocVersionInfo dvi = (args.Node as VETreeNode).VEObject as DocVersionInfo) + { + if (dvi == null) return; + + tc.SaveCurrentEditItem(); // save the current edit item if user happens to be editing a procedure + + // add a diaglog to prompt for the path inwhich to put the approved pdfs + int currentChildSetting = dvi.DocVersionConfig.SelectedSlave; + dvi.DocVersionConfig.SelectedSlave = args.UnitIndex; // set to selected child - will be -1 for non Parent/Child + + dlgPrintAllApprovedProcedures dlgPrnAllAprv = new dlgPrintAllApprovedProcedures(dvi); + dlgPrnAllAprv.ShowDialog(this); + + dvi.DocVersionConfig.SelectedSlave = currentChildSetting; // set back to what it was + } + } + void tv_PrintProcedure(object sender, vlnTreeEventArgs args) { ProcedureInfo pi = (args.Node as VETreeNode).VEObject as ProcedureInfo; @@ -2470,6 +2491,7 @@ namespace VEPROMS int _ItemID = (int)TabState["ItemID"]; ItemInfo _Procedure = ItemInfo.Get(_ItemID); // Open procedure in the editor. + if (_Procedure == null) continue; //skip and continue with foreach OpenItem(_Procedure); // SelectedStepTabPanel needs to be set so the print buttons on the ribbon will work. SelectedStepTabPanel = tc.MyEditItem.MyStepPanel.MyStepTabPanel; diff --git a/PROMS/Volian.Controls.Library/vlnTreeView.cs b/PROMS/Volian.Controls.Library/vlnTreeView.cs index 1cdda809..5c1d3608 100644 --- a/PROMS/Volian.Controls.Library/vlnTreeView.cs +++ b/PROMS/Volian.Controls.Library/vlnTreeView.cs @@ -563,6 +563,11 @@ namespace Volian.Controls.Library { if (PrintAllProcedures != null) PrintAllProcedures(sender, args); } + public event vlnTreeViewEvent PrintAllApprovedProcedures; //C2025-017 print all approved procedures + private void OnPrintAllApprovedProcedures(object sender, vlnTreeEventArgs args) + { + if (PrintAllApprovedProcedures != null) PrintAllApprovedProcedures(sender, args); + } public event vlnTreeViewEvent SelectDateToStartChangeBars; private void OnSelectDateToStartChangeBars(object sender, vlnTreeEventArgs args) { @@ -784,6 +789,7 @@ namespace Volian.Controls.Library MenuItem mip = new MenuItem("Print All Procedures for"); MenuItem mia = new MenuItem("Approve All Procedures for"); MenuItem mis = new MenuItem("Approve Some Procedures for"); + MenuItem mir = new MenuItem("Print All Approved Procedures for"); // C2025-017 print all approved procedures int k = 0; foreach (string s in dvi.UnitNames) { @@ -794,6 +800,8 @@ namespace Volian.Controls.Library ma.Tag = k; MenuItem ms = mis.MenuItems.Add(s, new EventHandler(miMultiUnit_Click)); ms.Tag = k; + MenuItem mr = mir.MenuItems.Add(s, new EventHandler(miMultiUnit_Click)); // C2025-017 print all approved procedures + mr.Tag = k; } //MenuItem mmp = mip.MenuItems.Add("All Units", new EventHandler(miMultiUnit_Click)); //mmp.Tag = 0; @@ -804,6 +812,7 @@ namespace Volian.Controls.Library cm.MenuItems.Add(mip); cm.MenuItems.Add(mia); cm.MenuItems.Add(mis); + cm.MenuItems.Add(mir); // C2025-017 print all approved procedures } else { @@ -811,6 +820,7 @@ namespace Volian.Controls.Library cm.MenuItems.Add("Print All Procedures", new EventHandler(mi_Click)); cm.MenuItems.Add("Approve All Procedures", new EventHandler(mi_Click)); cm.MenuItems.Add("Approve Some Procedures", new EventHandler(mi_Click)); + cm.MenuItems.Add("Print All Approved Procedures", new EventHandler(mi_Click)); } cm.MenuItems.Add("Report All Procedures Inconsistencies", new EventHandler(mi_Click)); } @@ -2035,6 +2045,9 @@ namespace Volian.Controls.Library case "Create Time Critical Action Summary": OnCreateTimeCriticalActionSummary(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag)); break; + case "Print All Approved Procedures for": //C2025-017 print all approved procedures + OnPrintAllApprovedProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, mi.Text, (int)mi.Tag)); + break; default: if (mip.Text.StartsWith("Showing Change Bars Starting")) OnSelectDateToStartChangeBars(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); @@ -2133,16 +2146,6 @@ namespace Volian.Controls.Library OnPrintTransitionReport(this, new vlnTreeEventArgs(SelectedNode as VETreeNode)); return; } - - - - - - - - - - if (mi.Text == "Export Procedure Set" || mi.Text == "Export Procedure") { OnExportImportProcedureSets(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); @@ -2346,6 +2349,9 @@ namespace Volian.Controls.Library //case "Check In Procedure Set": // CheckInDocVersion(SelectedNode as VETreeNode); // break; + case "Print All Approved Procedures": //C2025-017 print all approved procedures + OnPrintAllApprovedProcedures(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); + break; default: if (mi.Text.StartsWith("Showing Change Bars Starting")) OnSelectDateToStartChangeBars(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0)); -- 2.49.1