From 5ad9d81cc1cbb35d0df4f87d20ec12f0d4d78972 Mon Sep 17 00:00:00 2001 From: mschill Date: Fri, 14 Feb 2025 15:10:40 -0500 Subject: [PATCH] =?UTF-8?q?C2024-038=20PROMS=20=E2=80=93=20Summary=20of=20?= =?UTF-8?q?Changes=20report=20generation=20enhancements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is an upgrade item to add a method to exclude annotations and a way run the summary of changes report from a specific date. --- .../Extension/AuditExt.cs | 34 +++++++ .../Volian.Controls.Library/DisplayHistory.cs | 87 +++++++++++++++--- .../DisplayHistory.designer.cs | Bin 33744 -> 47962 bytes .../Volian.Controls.Library.csproj | 3 + .../PDFChronologyReport.cs | 4 +- 5 files changed, 115 insertions(+), 13 deletions(-) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs index 856f91f7..287d8e12 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs @@ -194,6 +194,23 @@ namespace VEPROMS.CSLA.Library public partial class AnnotationAuditInfoList { + + /// + /// C2024- 038 - Summary of Changes report generation enhancements + /// Constructor - takes a Generic list of AnnotationAuditInfo + /// and creates a AnnotationAuditInfoList + /// + public AnnotationAuditInfoList(List lst) + { + IsReadOnly = false; + if (lst != null) + { + foreach (AnnotationAuditInfo itm in lst) + this.Add(itm); + } + IsReadOnly = true; + } + /// /// Return a list of all AnnotationAuditInfo by ItemID. /// @@ -487,6 +504,23 @@ namespace VEPROMS.CSLA.Library public partial class ContentAuditInfoList { + + /// + /// C2024- 038 - Summary of Changes report generation enhancements + /// Constructor - takes a Generic list of ContentAuditInfo + /// and creates a ContentAuditInfoList + /// + public ContentAuditInfoList(List lst) + { + IsReadOnly = false; + if (lst != null) + { + foreach (ContentAuditInfo itm in lst) + this.Add(itm); + } + IsReadOnly = true; + } + /// /// Return a list of all ContentAuditInfo by ContentID. /// diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.cs b/PROMS/Volian.Controls.Library/DisplayHistory.cs index 8e647378..a66c6952 100644 --- a/PROMS/Volian.Controls.Library/DisplayHistory.cs +++ b/PROMS/Volian.Controls.Library/DisplayHistory.cs @@ -10,6 +10,7 @@ using System.IO; using System.Text.RegularExpressions; using JR.Utils.GUI.Forms; using Volian.Base.Library; +using System.Linq; namespace Volian.Controls.Library { @@ -163,7 +164,7 @@ namespace Volian.Controls.Library else { DateTime revDate; - if (!DateTime.TryParse(cfg.Print_RevDate, out revDate)) revDate = MyProcedureInfo.ChangeBarDate; // DateTime.Now; + if (!DateTime.TryParse(cfg.Print_RevDate, out revDate)) revDate = MyProcedureInfo.ChangeBarDate; // DateTime.Now; SetRevDate(revDate); //SetRevDate(DateTime.Parse(cfg.Print_RevDate)); } @@ -263,7 +264,7 @@ namespace Volian.Controls.Library { AnnotationTypeInfo ati = AnnotationTypeInfo.Get(aai.TypeID); // B2023-066: Crash when trying to access a deleted annotation type (added the ati==null check) - tn = annotationDeleted.Nodes.Add(ati==null?"Deleted Annotation Type":ati.Name); + tn = annotationDeleted.Nodes.Add(ati == null ? "Deleted Annotation Type" : ati.Name); } TreeNode cn = tn.Nodes.Add(aai.ListString()); cn.Tag = aai; @@ -517,7 +518,7 @@ namespace Volian.Controls.Library if (delC.Type >= 0 && delC.Type < 1000) { int indx = delC.Config.IndexOf("DelProcReason"); - if (indx >= 0 && delC.Config.Length > indx+15) // 15 accounts for 'DelProcReason = "' + if (indx >= 0 && delC.Config.Length > indx + 15) // 15 accounts for 'DelProcReason = "' { string reason = delC.Config.Substring(indx + 15); if (reason != null && reason.Length > 0) @@ -529,7 +530,7 @@ namespace Volian.Controls.Library } } } - TreeNode tnn = deletedItems.Nodes.Add(iai.ToString()+"; Reason: " + strR); + TreeNode tnn = deletedItems.Nodes.Add(iai.ToString() + "; Reason: " + strR); tnn.Tag = iai; #endregion } @@ -558,7 +559,7 @@ namespace Volian.Controls.Library if (MyProcedureInfo == null) { this.ParentForm.Cursor = Cursors.Default; - btnViewSummaryReport.Enabled = btnViewChronologyReport.Enabled = lbChanges.Items.Count > 0; + btnViewSummaryReport.Enabled = btnViewChronologyReport.Enabled = cbSumExcludeAnn.Enabled = DT_SumAsOf.Enabled = lbChanges.Items.Count > 0; return; } ContentAuditInfoList cail2; @@ -586,7 +587,7 @@ namespace Volian.Controls.Library // B2020-156: When procedure title is changed, it does not print in Summary/Chronolgy of changes. // Need to only check the date (not the date/time) for some procedures, the original item was listed // in the list box and should not be because some MyRevDate's did not have time included. - if (CompareDateOrDateTime(cai.DTS,MyRevDate) || cai.ActionWhen > MyRevDate) + if (CompareDateOrDateTime(cai.DTS, MyRevDate) || cai.ActionWhen > MyRevDate) { string itemTitle = FixPath(cai.Path); lbChanges.Items.Add(cai); @@ -614,7 +615,7 @@ namespace Volian.Controls.Library } //Console.WriteLine("WalkProcedure fini: {0} seconds", TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalSeconds); this.ParentForm.Cursor = Cursors.Default; - btnViewSummaryReport.Enabled = btnViewChronologyReport.Enabled = lbChanges.Items.Count > 0; + btnViewSummaryReport.Enabled = btnViewChronologyReport.Enabled = cbSumExcludeAnn.Enabled = DT_SumAsOf.Enabled = lbChanges.Items.Count > 0; RefreshRequired = false; return; } @@ -648,9 +649,73 @@ namespace Volian.Controls.Library //_AnnotationList = AnnotationAuditInfoList.GetChronology(0, 0, MyProcedureInfo.ChangeBarDate); //added setting selected slave in order for reports to replace unit number,etc jcb 20101010 MyItemInfo.MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave = ApplDisplayMode; - // OnSummaryPrintRequest(new DisplayHistoryReportEventArgs(Volian.Base.Library.VlnSettings.TemporaryFolder + @"\MySummary.pdf", MyItemInfo.MyProcedure, _SummaryAuditList, _AnnotationList)); - OnSummaryPrintRequest(new DisplayHistoryReportEventArgs(string.Format(@"{0}\{1} Summary of Changes.pdf", Volian.Base.Library.VlnSettings.TemporaryFolder, MyItemInfo.MyProcedure.PDFNumber), MyItemInfo.MyProcedure, _SummaryAuditList, _AnnotationList)); - //} + + var dhr = new DisplayHistoryReportEventArgs(string.Format(@"{0}\{1} Summary of Changes.pdf", Volian.Base.Library.VlnSettings.TemporaryFolder, MyItemInfo.MyProcedure.PDFNumber), MyItemInfo.MyProcedure, null, null); + + //C2024- 038 - Summary of Changes report generation enhancements + //check if need to modify + // _SummaryAuditList + if (DT_SumAsOf.Checked) + dhr.AuditList = FilterSummaryByDate(_SummaryAuditList, DT_SumAsOf.Value); + else + dhr.AuditList = _SummaryAuditList; + + //C2024- 038 - Summary of Changes report generation enhancements + // if Exclude Annotations Checked + // send an empty list instead of + //_AnnotationList + if (cbSumExcludeAnn.Checked) + dhr.AnnotationList = new AnnotationAuditInfoList(null); + else if (DT_SumAsOf.Checked) + dhr.AnnotationList = FilterSummaryByDate_Annotations(_AnnotationList, DT_SumAsOf.Value); + else + { dhr.AnnotationList = _AnnotationList; } + + OnSummaryPrintRequest(dhr); + } + + //C2024- 038 - Summary of Changes report generation enhancements + //modify _SummaryAuditList + //to limit to a specific date + private ContentAuditInfoList FilterSummaryByDate(ContentAuditInfoList summaryAuditList, DateTime value) + { + List slst = summaryAuditList.Clone().ToList(); + + //Grab the first change to each item before the date and set that to the AsOf date + foreach (ContentAuditInfo firstbeforedate in slst.GroupBy(x => x.ItemID).Select(x => x.OrderByDescending(y => y.DTS).FirstOrDefault(d => d.DTS < value))) + { + if (firstbeforedate != null && firstbeforedate.ActionWhat != "Deleted") + { + firstbeforedate.ActionWhat = $"As Of: {value.ToShortDateString()}"; + } + } + //remove all items before the date we are checking against + //note that for deleted - sometimes the DTS is not correct and + //need to use the ActionWhen + slst.RemoveAll(x => x.DTS < value && !x.ActionWhat.StartsWith("As Of:") && (x.ActionWhat != "Deleted" || (x.ActionWhen < x.DTS ? x.DTS : x.ActionWhen) < value)); + + //remove all items where first text matches the last text + //unless it was added after the date we are checking against + //or the last item is a deletion that occurred after + //the date we are checking against + var itms = slst.Select(x => x.ItemID).Distinct().ToList(); + foreach (int itmID in itms) + { + ContentAuditInfo first = slst.Where(i => i.ItemID == itmID).OrderBy(y => y.DTS).FirstOrDefault(); + ContentAuditInfo last = slst.Where(i => i.ItemID == itmID).OrderByDescending(y => y.DTS).FirstOrDefault(); + if (first != null && last != null && first.DTS < value && (last.ActionWhat != "Deleted" || (last.ActionWhen < last.DTS ? last.DTS : last.ActionWhen) < value) && ItemInfo.ConvertToDisplayText(first.Text) == ItemInfo.ConvertToDisplayText(last.Text)) + slst.RemoveAll(x => x.ItemID == itmID); + } + + return new ContentAuditInfoList(slst); + } + + //C2024- 038 - Summary of Changes report generation enhancements + //modify _SummaryAuditList + //to limit to a specific date + private AnnotationAuditInfoList FilterSummaryByDate_Annotations(AnnotationAuditInfoList annotationAuditList, DateTime value) + { + return new AnnotationAuditInfoList(annotationAuditList.Where(x => x.DTS >= value).ToList()); } private void btnRefresh_Click(object sender, EventArgs e) { @@ -1060,7 +1125,7 @@ namespace Volian.Controls.Library set { _AuditList = value; } } private AnnotationAuditInfoList _AnnotationList; - public AnnotationAuditInfoList AnnotationList + public AnnotationAuditInfoList AnnotationList { get { return _AnnotationList; } set { _AnnotationList = value; } diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs b/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs index 87fcb3cef4237d7ca3471a59b28b94458be79767..2936956c4dcbf0d21f6e969610d0ed757eb701dc 100644 GIT binary patch literal 47962 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 diff --git a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj index e615e5de..1510659d 100644 --- a/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj +++ b/PROMS/Volian.Controls.Library/Volian.Controls.Library.csproj @@ -443,6 +443,9 @@ DisplayBookMarks.cs Designer + + DisplayHistory.cs + DisplayLibDocs.cs Designer diff --git a/PROMS/Volian.Print.Library/PDFChronologyReport.cs b/PROMS/Volian.Print.Library/PDFChronologyReport.cs index b0111d5c..73e7ca1e 100644 --- a/PROMS/Volian.Print.Library/PDFChronologyReport.cs +++ b/PROMS/Volian.Print.Library/PDFChronologyReport.cs @@ -1090,7 +1090,7 @@ namespace Volian.Print.Library firstCAI = null; lastCAI = null; } - else if (firstCAI.ActionWhat == lastCAI.ActionWhat) + else if (firstCAI.ActionWhat == lastCAI.ActionWhat || firstCAI.ActionWhat.StartsWith("As Of:")) { auditList1.Add(firstCAI); auditList1.Add(lastCAI); @@ -1153,7 +1153,7 @@ namespace Volian.Print.Library firstCAI = null; lastCAI = null; } - else if (firstCAI.ActionWhat == lastCAI.ActionWhat) + else if (firstCAI.ActionWhat == lastCAI.ActionWhat || firstCAI.ActionWhat.StartsWith("As Of:")) { auditList1.Add(firstCAI); auditList1.Add(lastCAI); -- 2.47.2