1151 lines
42 KiB
C#
1151 lines
42 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using VEPROMS.CSLA.Library;
|
|
using System.IO;
|
|
using System.Text.RegularExpressions;
|
|
using JR.Utils.GUI.Forms;
|
|
using Volian.Base.Library;
|
|
using System.Linq;
|
|
|
|
namespace Volian.Controls.Library
|
|
{
|
|
public partial class DisplayHistory : UserControl
|
|
{
|
|
#region Events
|
|
public event DisplayHistoryReportEvent ChronologyPrintRequest;
|
|
public event DisplayHistoryReportEvent SummaryPrintRequest;
|
|
private void OnChronologyPrintRequest(DisplayHistoryReportEventArgs args)
|
|
{
|
|
if (ChronologyPrintRequest != null)
|
|
ChronologyPrintRequest(this, args);
|
|
}
|
|
private void OnSummaryPrintRequest(DisplayHistoryReportEventArgs args)
|
|
{
|
|
if (SummaryPrintRequest != null)
|
|
SummaryPrintRequest(this, args);
|
|
}
|
|
public event DisplayHistoryEvent HistorySelectionChanged;
|
|
private void OnHistorySelectionChanged(DisplayHistoryEventArgs args)
|
|
{
|
|
if (HistorySelectionChanged != null)
|
|
HistorySelectionChanged(this, args);
|
|
}
|
|
public event ItemRestoredHandler ItemRestored;
|
|
private void OnItemRestored(ItemInfo restoredItemInfo)
|
|
{
|
|
if (ItemRestored != null) ItemRestored(restoredItemInfo);
|
|
}
|
|
public event AnnotationRestoredHandler AnnotationRestored;
|
|
private void OnAnnotationRestored(AnnotationInfo restoredAnnotationInfo, ItemInfo currentItem)
|
|
{
|
|
if (AnnotationRestored != null) AnnotationRestored(restoredAnnotationInfo, currentItem);
|
|
}
|
|
#endregion
|
|
private ContentAuditInfoList _ChronologyAuditList;
|
|
private ContentAuditInfoList _SummaryAuditList;
|
|
private AnnotationAuditInfoList _AnnotationList;
|
|
private ProcedureInfo _MyProcedureInfo;
|
|
public ProcedureInfo MyProcedureInfo
|
|
{
|
|
get { return _MyProcedureInfo; }
|
|
set
|
|
{
|
|
if (DesignMode) return; // B2019-043 need to check if we are just saving changes to the user interface
|
|
if (value is ProcedureInfo && _MyProcedureInfo is ProcedureInfo && value.ItemID == _MyProcedureInfo.ItemID)
|
|
return;
|
|
_MyProcedureInfo = value;
|
|
if (value == null) return;
|
|
SetRevDate(MyProcedureInfo.DTS);
|
|
if (_MyProcedureInfo != null && RefreshRequired && lbChanges.Visible)
|
|
WalkProcedure();
|
|
}
|
|
}
|
|
private void SetRevDate(DateTime dts)
|
|
{
|
|
MyRevDate = dts;
|
|
RefreshRequired = true;
|
|
}
|
|
private ItemInfo _MyItemInfo;
|
|
public ItemInfo MyItemInfo
|
|
{
|
|
get { return _MyItemInfo; }
|
|
set
|
|
{
|
|
if (DesignMode) return; // B2019-043 need to check if we are just saving changes to the user interface
|
|
if (value is ItemInfo && _MyItemInfo is ItemInfo && value.ItemID == _MyItemInfo.ItemID)
|
|
return;
|
|
_MyItemInfo = value;
|
|
if (_MyItemInfo != null)
|
|
{
|
|
MyProcedureInfo = _MyItemInfo.MyProcedure;
|
|
this.Visible = true;
|
|
UpdateHistory();
|
|
if (this.lbChanges.Visible && RefreshRequired)
|
|
WalkProcedure();
|
|
}
|
|
else
|
|
this.Visible = false;
|
|
}
|
|
}
|
|
private EditItem _MyEditItem;
|
|
|
|
public EditItem MyEditItem
|
|
{
|
|
get { return _MyEditItem; }
|
|
set
|
|
{
|
|
if (DesignMode) return; // B2019-043 need to check if we are just saving changes to the user interface
|
|
_MyEditItem = value;
|
|
if (value != null)
|
|
MyItemInfo = value.MyItemInfo;
|
|
else
|
|
MyItemInfo = null;
|
|
}
|
|
}
|
|
public void RefreshList()
|
|
{
|
|
if (MyEditItem == null)
|
|
this.Visible = false;
|
|
if (this.Visible)
|
|
{
|
|
if (RefreshRequired)
|
|
WalkProcedure();
|
|
UpdateHistory();
|
|
}
|
|
}
|
|
private int _ApplDisplayMode = -1;
|
|
public int ApplDisplayMode
|
|
{
|
|
get { return _ApplDisplayMode; }
|
|
set
|
|
{
|
|
if (MyProcedureInfo == null) return;
|
|
_ApplDisplayMode = value;
|
|
RefreshRequired = true;
|
|
if (_ApplDisplayMode > 0)
|
|
{
|
|
MyProcedureInfo.MyProcedure.MyContent.RefreshContentDetails();
|
|
ProcedureConfig cfg = MyProcedureInfo.MyConfig as ProcedureConfig;
|
|
cfg.SelectedSlave = value;
|
|
if (cfg.Print_RevDate == null || cfg.Print_RevDate == string.Empty)
|
|
SetRevDate(MyProcedureInfo.DTS);
|
|
else
|
|
SetRevDate(DateTime.Parse(cfg.Print_RevDate));
|
|
}
|
|
else
|
|
{
|
|
if (MyProcedureInfo.MyDocVersion.DocVersionConfig.Unit_Count > 1)
|
|
{
|
|
DateTime minDts = DateTime.MaxValue;
|
|
for (int j = 1; j <= MyProcedureInfo.MyDocVersion.DocVersionConfig.Unit_Count; j++)
|
|
{
|
|
ProcedureConfig cfg = MyProcedureInfo.MyConfig as ProcedureConfig;
|
|
cfg.SelectedSlave = j;
|
|
if (cfg.Print_RevDate != null && cfg.Print_RevDate != string.Empty)
|
|
{
|
|
if (DateTime.Parse(cfg.Print_RevDate) < minDts && DateTime.Parse(cfg.Print_RevDate) > MyProcedureInfo.DTS)
|
|
minDts = DateTime.Parse(cfg.Print_RevDate);
|
|
}
|
|
else
|
|
minDts = MyProcedureInfo.DTS;
|
|
}
|
|
SetRevDate(minDts);
|
|
}
|
|
else
|
|
{
|
|
ProcedureConfig cfg = MyProcedureInfo.MyConfig as ProcedureConfig;
|
|
if (cfg.Print_RevDate == null || cfg.Print_RevDate == string.Empty)
|
|
SetRevDate(MyProcedureInfo.DTS);
|
|
else
|
|
{
|
|
DateTime revDate;
|
|
if (!DateTime.TryParse(cfg.Print_RevDate, out revDate)) revDate = MyProcedureInfo.ChangeBarDate; // DateTime.Now;
|
|
SetRevDate(revDate);
|
|
//SetRevDate(DateTime.Parse(cfg.Print_RevDate));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
private DateTime _MyRevDate;
|
|
public DateTime MyRevDate
|
|
{
|
|
get { return _MyRevDate; }
|
|
set { _MyRevDate = value; }
|
|
}
|
|
private bool RefreshRequired = false;
|
|
public DisplayHistory()
|
|
{
|
|
InitializeComponent();
|
|
myRTB.FormatFont = null;
|
|
RefreshRequired = true;
|
|
}
|
|
|
|
private void lbChanges_VisibleChanged(object sender, System.EventArgs e)
|
|
{
|
|
if (ApplDisplayMode == -1)
|
|
{
|
|
ApplDisplayMode = 0;
|
|
}
|
|
if (lbChanges.Visible && RefreshRequired)
|
|
WalkProcedure();
|
|
}
|
|
|
|
private void lbChanges_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (lbChanges.SelectedIndex > -1)
|
|
{
|
|
ContentAuditInfo cai = lbChanges.SelectedItem as ContentAuditInfo;
|
|
if (cai != null)
|
|
{
|
|
// The following line was incorrectly showing a message stating that the item was deleted when it was not.
|
|
//if (cai.DeleteStatus > 0 || (cai.DeleteStatus == 0 && cai.ActionWhen.Year == DateTime.MinValue.Year))
|
|
if (cai.DeleteStatus > 0)
|
|
FlexibleMessageBox.Show("This item has been deleted.", "Deleted Item", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
else
|
|
{
|
|
try
|
|
{
|
|
OnHistorySelectionChanged(new DisplayHistoryEventArgs(cai.ItemID));
|
|
}
|
|
// If the selected item is deleted display a message rather than crashing
|
|
catch (Exception ex)
|
|
{
|
|
FlexibleMessageBox.Show("This item has been deleted.", "Deleted Item", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AnnotationAuditInfo aai = lbChanges.SelectedItem as AnnotationAuditInfo;
|
|
OnHistorySelectionChanged(new DisplayHistoryEventArgs(aai.ItemID));
|
|
}
|
|
}
|
|
}
|
|
private void UpdateHistory()
|
|
{
|
|
this.Cursor = Cursors.WaitCursor;
|
|
//DateTime start = DateTime.Now;
|
|
//Console.WriteLine(start);
|
|
#region setup
|
|
btnRestore.Enabled = false;
|
|
myRTB.Clear();
|
|
//myRTB.LastRtf = string.Empty;
|
|
myVFG.Clear();
|
|
myPicBox.Image = null;
|
|
if (!tvAudits.IsDisposed) // fixes a crash that happend while debugging separate windows, have not been able to reproduce. left this IF check in just in case. - jsj 2-1-2018
|
|
tvAudits.Nodes.Clear();
|
|
if (MyItemInfo == null)
|
|
{
|
|
this.Cursor = Cursors.Default;
|
|
return;
|
|
}
|
|
MyItemInfo.RefreshItemAnnotations();
|
|
#endregion
|
|
//if (AnnotationOnly)
|
|
//{
|
|
#region annotation deleted
|
|
//annotation deleted by itemid
|
|
TreeNode annotationDeleted = null;
|
|
AnnotationAuditInfoList aail = AnnotationAuditInfoList.GetByItemID(MyItemInfo.ItemID);
|
|
foreach (AnnotationAuditInfo aai in aail)
|
|
{
|
|
TreeNode tn = null;
|
|
if (aai.DeleteStatus > 0)
|
|
{
|
|
if (annotationDeleted == null)
|
|
annotationDeleted = tvAudits.Nodes.Add("Deleted Annotations");
|
|
if (tn == null)
|
|
{
|
|
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);
|
|
}
|
|
TreeNode cn = tn.Nodes.Add(aai.ListString());
|
|
cn.Tag = aai;
|
|
}
|
|
}
|
|
//end annotation deleted
|
|
#endregion
|
|
#region annotation changes
|
|
//annotation change by annotationid
|
|
TreeNode annotationHistory = null;
|
|
if (MyItemInfo.ItemAnnotationCount > 0)
|
|
{
|
|
foreach (AnnotationInfo ai in MyItemInfo.ItemAnnotations)
|
|
{
|
|
TreeNode tn = null;
|
|
aail = AnnotationAuditInfoList.GetByAnnotationID(ai.AnnotationID);
|
|
foreach (AnnotationAuditInfo aai in aail)
|
|
{
|
|
if (aai.DTS != ai.DTS)
|
|
{
|
|
if (annotationHistory == null)
|
|
annotationHistory = tvAudits.Nodes.Add("Annotation History");
|
|
if (tn == null)
|
|
tn = annotationHistory.Nodes.Add(string.Format("{0} - {1}", ai.MyAnnotationType.Name, ai.SearchText));
|
|
TreeNode cn = tn.Nodes.Add(aai.ToString());
|
|
cn.Tag = aai;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//end annotation change
|
|
#endregion
|
|
// return;
|
|
//}
|
|
#region content changes
|
|
//content changes
|
|
TreeNode contentHistory = null;
|
|
if (MyItemInfo == null) return;
|
|
ContentAuditInfoList cail = ContentAuditInfoList.Get(MyItemInfo.ContentID, MyItemInfo.MyProcedure.DTS);
|
|
// ContentAuditInfoList cail = ContentAuditInfoList.GetChronology(MyItemInfo.MyProcedure.ItemID, MyItemInfo.ItemID, false);
|
|
ContentInfo ci = ContentInfo.Get(MyItemInfo.ContentID);
|
|
foreach (ContentAuditInfo cai in cail)
|
|
{
|
|
if (cai.DeleteStatus == 0)
|
|
{
|
|
if (cai.Type == 20008)
|
|
{
|
|
GridAuditInfoList gail = GridAuditInfoList.Get(cai.ContentID);
|
|
foreach (GridAuditInfo gai in gail)
|
|
{
|
|
// B2022-038: Fix crash on restore of grid. If it doesn't have a ContentAuditID don't add to list (was causing a Null access
|
|
// when restoring the change)
|
|
if (gai.DeleteStatus == 0 && gai.ContentAuditID != 0)
|
|
{
|
|
if (contentHistory == null)
|
|
contentHistory = tvAudits.Nodes.Add("Content Changes"); //contentHistory = tvAudits.Nodes.Add("Content History");
|
|
TreeNode tn = contentHistory.Nodes.Add(gai.ToString());
|
|
tn.Tag = gai;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
// handle figures (images):
|
|
else if (cai.Type == 20036 || cai.Type == 20037 || cai.Type == 20038 || cai.Type == 20039)
|
|
{
|
|
ImageAuditInfoList imail = ImageAuditInfoList.Get(cai.ContentID);
|
|
foreach (ImageAuditInfo imai in imail)
|
|
{
|
|
if (imai.DeleteStatus == 0)
|
|
{
|
|
if (contentHistory == null)
|
|
contentHistory = tvAudits.Nodes.Add("Content Changes");
|
|
TreeNode tn = contentHistory.Nodes.Add(imai.ToString());
|
|
tn.Tag = imai;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
else if (cai.DTS != ci.DTS)
|
|
{
|
|
if (contentHistory == null)
|
|
contentHistory = tvAudits.Nodes.Add("Content Changes"); //contentHistory = tvAudits.Nodes.Add("Content History");
|
|
TreeNode tn = contentHistory.Nodes.Add(cai.ListString());
|
|
tn.Tag = cai;
|
|
}
|
|
}
|
|
}
|
|
//end content changes
|
|
#endregion
|
|
#region items
|
|
TreeNode deletedItems = null;
|
|
TreeNode previousItem = null;
|
|
TreeNode nextItem = null;
|
|
TreeNode procedurePart = null;
|
|
TreeNode sectionPart = null;
|
|
TreeNode cautionPart = null;
|
|
TreeNode notePart = null;
|
|
TreeNode rnoPart = null;
|
|
TreeNode stepPart = null;
|
|
TreeNode tablePart = null;
|
|
#endregion
|
|
ItemAuditInfoList iail = ItemAuditInfoList.Get(MyItemInfo.ItemID);
|
|
foreach (ItemAuditInfo iai in iail)
|
|
{
|
|
#region old style
|
|
// switch (iai.Level)
|
|
// {
|
|
// #region previous item
|
|
// case 0: //previous item
|
|
// {
|
|
// #region old style
|
|
// //if (previousItem == null)
|
|
// // previousItem = tvAudits.Nodes.Add("Deleted Previous Item"); //previousItem = tvAudits.Nodes.Add("Previous Item");
|
|
// //TreeNode tn = previousItem.Nodes.Add(iai.ToString());
|
|
// //tn.Tag = iai;
|
|
// #endregion
|
|
// #region new style
|
|
// if (deletedItems == null)
|
|
// deletedItems = tvAudits.Nodes.Add("Deleted Items");
|
|
// TreeNode tnn = deletedItems.Nodes.Add(iai.ToString());
|
|
// tnn.Tag = iai;
|
|
// #endregion
|
|
// break;
|
|
// }
|
|
// #endregion
|
|
// #region next item
|
|
// case 1: //next item
|
|
// {
|
|
// #region old style
|
|
// //if (nextItem == null)
|
|
// // nextItem = tvAudits.Nodes.Add("Deleted Next Item"); //nextItem = tvAudits.Nodes.Add("Next Item");
|
|
// //TreeNode tn = nextItem.Nodes.Add(iai.ToString());
|
|
// //tn.Tag = iai;
|
|
// #endregion
|
|
// #region new style
|
|
// if (deletedItems == null)
|
|
// deletedItems = tvAudits.Nodes.Add("Deleted Items");
|
|
// TreeNode tnn = deletedItems.Nodes.Add(iai.ToString());
|
|
// tnn.Tag = iai;
|
|
// #endregion
|
|
// break;
|
|
// }
|
|
// #endregion
|
|
// case 2: //parts
|
|
// {
|
|
// #region old style
|
|
// //PartAuditInfoList pail = null;
|
|
// //pail = PartAuditInfoList.GetByDeleteStatus(iai.DeleteStatus);
|
|
// //if (pail.Count == 0)
|
|
// // pail = PartAuditInfoList.GetByItemID(iai.ItemID);
|
|
// //foreach (PartAuditInfo pai in pail)
|
|
// //{
|
|
// // if (pai.ContentID == MyItemInfo.ContentID)
|
|
// // {
|
|
// // switch (pai.FromType)
|
|
// // {
|
|
// // #region procedure part
|
|
// // case 1: //procedures
|
|
// // {
|
|
// // if (procedurePart == null)
|
|
// // procedurePart = tvAudits.Nodes.Add("Deleted Procedures"); //procedurePart = tvAudits.Nodes.Add("Procedures");
|
|
// // TreeNode tn = procedurePart.Nodes.Add(iai.ToString());
|
|
// // tn.Tag = iai;
|
|
// // break;
|
|
// // }
|
|
// // #endregion
|
|
// // #region section part
|
|
// // case 2: //sections
|
|
// // {
|
|
// // if (sectionPart == null)
|
|
// // sectionPart = tvAudits.Nodes.Add("Deleted Sections"); //sectionPart = tvAudits.Nodes.Add("Sections");
|
|
// // TreeNode tn = sectionPart.Nodes.Add(iai.ToString());
|
|
// // tn.Tag = iai;
|
|
// // break;
|
|
// // }
|
|
// // #endregion
|
|
// // #region caution part
|
|
// // case 3: //cautions
|
|
// // {
|
|
// // if (cautionPart == null)
|
|
// // cautionPart = tvAudits.Nodes.Add("Deleted Cautions"); //cautionPart = tvAudits.Nodes.Add("Cautions");
|
|
// // TreeNode tn = cautionPart.Nodes.Add(iai.ToString());
|
|
// // tn.Tag = iai;
|
|
// // break;
|
|
// // }
|
|
// // #endregion
|
|
// // #region note part
|
|
// // case 4: //notes
|
|
// // {
|
|
// // if (notePart == null)
|
|
// // notePart = tvAudits.Nodes.Add("Deleted Notes"); //notePart = tvAudits.Nodes.Add("Notes");
|
|
// // TreeNode tn = notePart.Nodes.Add(iai.ToString());
|
|
// // tn.Tag = iai;
|
|
// // break;
|
|
// // }
|
|
// // #endregion
|
|
// // #region rno part
|
|
// // case 5: //rnos
|
|
// // {
|
|
// // if (rnoPart == null)
|
|
// // rnoPart = tvAudits.Nodes.Add("Deleted RNOs"); //rnoPart = tvAudits.Nodes.Add("RNOs");
|
|
// // TreeNode tn = rnoPart.Nodes.Add(iai.ToString());
|
|
// // tn.Tag = iai;
|
|
// // break;
|
|
// // }
|
|
// // #endregion
|
|
// // #region step part
|
|
// // case 6: //steps
|
|
// // {
|
|
// // if (stepPart == null)
|
|
// // stepPart = tvAudits.Nodes.Add("Deleted Steps"); //stepPart = tvAudits.Nodes.Add("Steps");
|
|
// // TreeNode tn = stepPart.Nodes.Add(iai.ToString());
|
|
// // tn.Tag = iai;
|
|
// // break;
|
|
// // }
|
|
// // #endregion
|
|
// // #region table part
|
|
// // case 7: //tables
|
|
// // {
|
|
// // if (tablePart == null)
|
|
// // tablePart = tvAudits.Nodes.Add("Deleted Tables"); //tablePart = tvAudits.Nodes.Add("Tables");
|
|
// // TreeNode tn = tablePart.Nodes.Add(iai.ToString());
|
|
// // tn.Tag = iai;
|
|
// // break;
|
|
// // }
|
|
// // #endregion
|
|
// // }
|
|
// // }
|
|
// //}
|
|
// #endregion
|
|
// #region new style
|
|
// if (deletedItems == null)
|
|
// deletedItems = tvAudits.Nodes.Add("Deleted Items");
|
|
// TreeNode tnn = deletedItems.Nodes.Add(iai.ToString());
|
|
// tnn.Tag = iai;
|
|
// #endregion
|
|
// break;
|
|
// }
|
|
//}
|
|
#endregion
|
|
#region new style
|
|
// B2023-117 if DeleteStatus is zero,don't try to get Audit Info List
|
|
if (iai.DeleteStatus == 0) continue;
|
|
if (deletedItems == null)
|
|
deletedItems = tvAudits.Nodes.Add("Deleted Items");
|
|
string strR = null;
|
|
// see if a deleted procedure, from itemaudit, get contentaudit
|
|
ContentAuditInfoList lDelC = ContentAuditInfoList.GetByDeleteStatus(iai.DeleteStatus);
|
|
foreach (ContentAuditInfo delC in lDelC)
|
|
{
|
|
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 = "'
|
|
{
|
|
string reason = delC.Config.Substring(indx + 15);
|
|
if (reason != null && reason.Length > 0)
|
|
{
|
|
indx = reason.IndexOf("\"");
|
|
if (indx > 0) strR = reason.Substring(0, reason.IndexOf("\""));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
TreeNode tnn = deletedItems.Nodes.Add(iai.ToString() + "; Reason: " + strR);
|
|
tnn.Tag = iai;
|
|
#endregion
|
|
}
|
|
//Console.WriteLine("UpdateHistory: {0} seconds",TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalSeconds);
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
// B2020-156: If time is at midnight, only check date.
|
|
private bool CompareDateOrDateTime(DateTime dt1, DateTime dt2)
|
|
{
|
|
if (dt1.TimeOfDay == TimeSpan.Zero || dt2.TimeOfDay == TimeSpan.Zero)
|
|
{
|
|
if (dt1.Date > dt2.Date) return true;
|
|
return false;
|
|
}
|
|
if (dt1 > dt2) return true;
|
|
return false;
|
|
}
|
|
private void WalkProcedure()
|
|
{
|
|
//return;
|
|
this.ParentForm.Cursor = Cursors.WaitCursor;
|
|
Application.DoEvents();
|
|
//DateTime start = DateTime.Now;
|
|
//Console.WriteLine(start);
|
|
lbChanges.Items.Clear();
|
|
if (MyProcedureInfo == null)
|
|
{
|
|
this.ParentForm.Cursor = Cursors.Default;
|
|
btnViewSummaryReport.Enabled = btnViewChronologyReport.Enabled = cbSumExcludeAnn.Enabled = DT_SumAsOf.Enabled = lbChanges.Items.Count > 0;
|
|
return;
|
|
}
|
|
ContentAuditInfoList cail2;
|
|
ContentAuditInfoList cail3;
|
|
AnnotationAuditInfoList aail2;
|
|
if (ApplDisplayMode > 0)
|
|
{
|
|
cail2 = ContentAuditInfoList.GetChronologyByUnit(MyProcedureInfo.ItemID, MyProcedureInfo.ItemID, false, ApplDisplayMode, MyProcedureInfo.ChangeBarDate);
|
|
cail3 = ContentAuditInfoList.GetSummaryByUnit(MyProcedureInfo.ItemID, MyProcedureInfo.ItemID, false, ApplDisplayMode, MyProcedureInfo.ChangeBarDate);
|
|
aail2 = AnnotationAuditInfoList.GetChronologyByUnit(MyProcedureInfo.ItemID, MyProcedureInfo.ItemID, ApplDisplayMode, MyProcedureInfo.ChangeBarDate);
|
|
}
|
|
else
|
|
{
|
|
cail2 = ContentAuditInfoList.GetChronology(MyProcedureInfo.ItemID, MyProcedureInfo.ItemID, false, MyProcedureInfo.ChangeBarDate);
|
|
cail3 = ContentAuditInfoList.GetSummary(MyProcedureInfo.ItemID, MyProcedureInfo.ItemID, false, MyProcedureInfo.ChangeBarDate);
|
|
aail2 = AnnotationAuditInfoList.GetChronology(MyProcedureInfo.ItemID, MyProcedureInfo.ItemID, MyProcedureInfo.ChangeBarDate);
|
|
}
|
|
//Console.WriteLine("WalkProcedure cail2: {0} seconds", TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalSeconds);
|
|
_ChronologyAuditList = cail2;
|
|
_SummaryAuditList = cail3;
|
|
//Console.WriteLine("WalkProcedure aail2: {0} seconds", TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalSeconds);
|
|
_AnnotationList = aail2;
|
|
foreach (ContentAuditInfo cai in cail2)
|
|
{
|
|
// 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)
|
|
{
|
|
string itemTitle = FixPath(cai.Path);
|
|
lbChanges.Items.Add(cai);
|
|
}
|
|
}
|
|
foreach (AnnotationAuditInfo aai in aail2)
|
|
{
|
|
string stepnum = string.Empty;
|
|
foreach (ContentAuditInfo cai in cail2)
|
|
{
|
|
if (cai.ContentID == aai.IContentID)
|
|
{
|
|
stepnum = FixPath(cai.Path);
|
|
break;
|
|
}
|
|
}
|
|
if (stepnum == string.Empty)
|
|
{
|
|
ItemInfo iii = aai.MyItemInfo;
|
|
if (iii != null)
|
|
stepnum = FixPath(iii.SearchPath);
|
|
}
|
|
if (aai.DTS > MyRevDate)
|
|
lbChanges.Items.Add(aai);
|
|
}
|
|
//Console.WriteLine("WalkProcedure fini: {0} seconds", TimeSpan.FromTicks(DateTime.Now.Ticks - start.Ticks).TotalSeconds);
|
|
this.ParentForm.Cursor = Cursors.Default;
|
|
btnViewSummaryReport.Enabled = btnViewChronologyReport.Enabled = cbSumExcludeAnn.Enabled = DT_SumAsOf.Enabled = lbChanges.Items.Count > 0;
|
|
RefreshRequired = false;
|
|
return;
|
|
}
|
|
private static string FixPath(string path)
|
|
{
|
|
string itemTitle = Regex.Replace(path, "^..+?\\u0007", "");
|
|
itemTitle = itemTitle.Replace("\x11", itemTitle[0] == '\x11' ? "" : " - ").Replace(@"\u8209?", "-").Replace(@"\u9586?", @"\");
|
|
return itemTitle;
|
|
}
|
|
private void btnViewChronologyReport_Click(object sender, EventArgs e)
|
|
{
|
|
RefreshList();
|
|
//if (lbChanges.Items.Count > 0)
|
|
//{
|
|
//jcb added 20120425 to suppress annotations in report
|
|
//jcb commented out 20130409 per bug C2012-022
|
|
//_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;
|
|
// OnChronologyPrintRequest(new DisplayHistoryReportEventArgs(Volian.Base.Library.VlnSettings.TemporaryFolder + @"\MyChronology.pdf", MyItemInfo.MyProcedure, _ChronologyAuditList, _AnnotationList));
|
|
OnChronologyPrintRequest(new DisplayHistoryReportEventArgs(string.Format(@"{0}\{1} Chronology of Changes.pdf", Volian.Base.Library.VlnSettings.TemporaryFolder, MyItemInfo.MyProcedure.PDFNumber), MyItemInfo.MyProcedure, _ChronologyAuditList, _AnnotationList));
|
|
//}
|
|
}
|
|
private void btnViewSummaryReport_Click(object sender, EventArgs e)
|
|
{
|
|
RefreshList();
|
|
//if (lbChanges.Items.Count > 0)
|
|
//{
|
|
//jcb added 20120425 to suppress annotations in report
|
|
//jcb commented out 20130409 per bug C2012-022
|
|
//_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;
|
|
|
|
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<ContentAuditInfo> 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)
|
|
{
|
|
RefreshList();
|
|
}
|
|
private void btnRestore_Click(object sender, EventArgs e)
|
|
{
|
|
MyEditItem.SaveContents();
|
|
TreeNode tn = tvAudits.SelectedNode;
|
|
if (tn.Tag is ContentAuditInfo)
|
|
{
|
|
ContentAuditInfo cai = tn.Tag as ContentAuditInfo;
|
|
// if original equation is restored, don't allow it because it is empty:
|
|
if ((cai.Type > 20999 && cai.Type < 21010) && cai.ActionWhat.ToUpper() == "ORIGINAL")
|
|
{
|
|
FlexibleMessageBox.Show(this, "Cannot restore original empty or new equation.", "Warning on restore", MessageBoxButtons.OK);
|
|
return;
|
|
}
|
|
if (FlexibleMessageBox.Show(this, "Do you want to restore this content change?", "Confirm Content Change Restore", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
|
|
{
|
|
ROFstInfo myRoFst = null; // B2017-118 If No ROFST don't crash
|
|
if (MyItemInfo.MyDocVersion.DocVersionAssociations != null)
|
|
myRoFst = MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
|
if (myRoFst != null) myRoFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
|
|
ContentInfo ci = ContentInfo.RestoreContent(cai, myRoFst);
|
|
if (myRoFst != null) myRoFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
|
|
RefreshRequired = true;
|
|
UpdateHistory();
|
|
MyItemInfo.RefreshConfig();
|
|
// B2017-209: see if the restore has invalid enhanced data, i.e. the source step that it 'links to' does not exist.
|
|
// Note that this is only applicable when restoring an enhanced step if its linked source step is deleted because
|
|
// the enhanced (background/deviation/etc) cannot be deleted unless they are unlinked first.
|
|
if (MyItemInfo.IsEnhancedStep)
|
|
{
|
|
// get id for step that is linked & see if it exists - if not, clear the enhanced config data
|
|
StepConfig sc = MyItemInfo.MyConfig as StepConfig;
|
|
ItemInfo iexists = ItemInfo.Get(sc.MyEnhancedDocuments[0].ItemID);
|
|
if (iexists == null) MyItemInfo.RemoveEnhancedFromConfig(true);
|
|
}
|
|
myRTB.Clear();
|
|
myVFG.Clear();
|
|
MyEditItem.SetAllTabs();
|
|
MyItemInfo.UpdateTransitionText();
|
|
MyItemInfo.UpdateROText();
|
|
}
|
|
}
|
|
if (tn.Tag is ItemAuditInfo)
|
|
{
|
|
ItemAuditInfo iai = tn.Tag as ItemAuditInfo;
|
|
if (FlexibleMessageBox.Show(this, string.Format("Do you want to restore this {0}?", iai.ItemType), string.Format("Confirm {0} Restore", iai.ItemType), MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
|
|
{
|
|
//Console.WriteLine("DisplayHistory.btnRestore_Click @ {0}", DateTime.Now);
|
|
ItemInfo ii = null;
|
|
if (iai.Level == 2)
|
|
{
|
|
ROFstInfo myRoFst = null; // B2017-118 If No ROFST don't crash
|
|
if (MyItemInfo.MyDocVersion.DocVersionAssociations != null)
|
|
myRoFst = MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
|
if (myRoFst != null) myRoFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
|
|
ii = MyItemInfo.RestoreItem(iai, myRoFst);
|
|
if (myRoFst != null) myRoFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
|
|
//_MyEditItem.AddChild((E_FromType)fromtype, contenttype);
|
|
//ii.ItemParts[0].FromType
|
|
//ii.MyContent.Type
|
|
EditItem nextItem = MyEditItem.GetNextItem((E_FromType)ii.ItemParts[0].FromType, ii);
|
|
//MyEditItem.AddChild(ii.MyContent.Text, (E_FromType)ii.ItemParts[0].FromType, (int)ii.MyContent.Type, null);
|
|
if (ii.IsStep)
|
|
ii = StepInfo.Get(ii.ItemID);
|
|
else if (ii.IsSection)
|
|
ii = SectionInfo.Get(ii.ItemID);
|
|
else if (ii.IsProcedure)
|
|
ii = ProcedureInfo.Get(ii.ItemID);
|
|
if (nextItem != null)
|
|
{
|
|
switch (nextItem.MyChildRelation)
|
|
{
|
|
case ChildRelation.None:
|
|
break;
|
|
case ChildRelation.After:
|
|
MyEditItem.AddChildAfter(ii, nextItem);
|
|
break;
|
|
case ChildRelation.Before:
|
|
MyEditItem.AddChildBefore(ii, nextItem);
|
|
break;
|
|
case ChildRelation.RNO:
|
|
MyEditItem.AddChildRNO(ii, nextItem);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch ((E_FromType)ii.ItemParts[0].FromType)
|
|
{
|
|
case E_FromType.Caution:
|
|
MyEditItem.AddChildBefore(ii, nextItem);
|
|
break;
|
|
case E_FromType.Note:
|
|
MyEditItem.AddChildBefore(ii, nextItem);
|
|
break;
|
|
case E_FromType.Procedure:
|
|
MyEditItem.AddChildAfter(ii, nextItem);
|
|
break;
|
|
case E_FromType.RNO:
|
|
MyEditItem.AddChildRNO(ii, nextItem);
|
|
break;
|
|
case E_FromType.Section:
|
|
MyEditItem.AddChildAfter(ii, nextItem);
|
|
break;
|
|
case E_FromType.Step:
|
|
MyEditItem.AddChildAfter(ii, nextItem);
|
|
break;
|
|
case E_FromType.Table:
|
|
MyEditItem.AddChildAfter(ii, nextItem);
|
|
break;
|
|
case E_FromType.SupInfo:
|
|
MyEditItem.AddChildSupInfo(ii, nextItem);
|
|
break;
|
|
default:
|
|
MyEditItem.AddChildAfter(ii, nextItem);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ROFstInfo myRoFst = null; // B2017-118 If No ROFST don't crash
|
|
if (MyItemInfo.MyDocVersion.DocVersionAssociations != null)
|
|
myRoFst = MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
|
if (myRoFst != null) myRoFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
|
|
ii = MyItemInfo.RestoreSibling(iai, myRoFst);
|
|
if (myRoFst != null) myRoFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
|
|
if (ii.IsStep)
|
|
ii = StepInfo.Get(ii.ItemID);
|
|
else if (ii.IsSection)
|
|
ii = SectionInfo.Get(ii.ItemID);
|
|
else if (ii.IsProcedure)
|
|
ii = ProcedureInfo.Get(ii.ItemID);
|
|
EditItem nextItem = iai.Level == 0 ? MyEditItem : MyEditItem.MyNextEditItem;
|
|
switch (MyEditItem.MyChildRelation)
|
|
{
|
|
case ChildRelation.None:
|
|
break;
|
|
case ChildRelation.After:
|
|
MyEditItem.ActiveParent.AddChildAfter(ii, nextItem);
|
|
break;
|
|
case ChildRelation.Before:
|
|
MyEditItem.ActiveParent.AddChildBefore(ii, nextItem);
|
|
break;
|
|
case ChildRelation.RNO:
|
|
MyEditItem.ActiveParent.AddChildRNO(ii, nextItem);
|
|
break;
|
|
case ChildRelation.SupInfo:
|
|
MyEditItem.ActiveParent.AddChildSupInfo(ii, nextItem);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
ii.UpdateTransitionText();
|
|
ii.UpdateROText();
|
|
}
|
|
if (MyEditItem.MyPreviousEditItem != null)
|
|
MyEditItem.MyPreviousEditItem.SetAllTabs();
|
|
else
|
|
MyEditItem.SetAllTabs();
|
|
RefreshRequired = true;
|
|
UpdateHistory();
|
|
myRTB.Clear();
|
|
myVFG.Clear();
|
|
}
|
|
}
|
|
if (tn.Tag is AnnotationAuditInfo)
|
|
{
|
|
AnnotationAuditInfo aai = tn.Tag as AnnotationAuditInfo;
|
|
if (FlexibleMessageBox.Show(this, "Do you want to restore this annotation?", "Confirm Annotation Restore", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
|
|
{
|
|
AnnotationInfo ai = AnnotationInfo.RestoreAnnotation(aai);
|
|
// B2023-072: Don't crash if annotation type was deleted for the restore annotation
|
|
if (ai == null)
|
|
{
|
|
FlexibleMessageBox.Show(this, "Annotation Type was deleted, cannot restore Annotation Type\r\nCopy text from window in Change Details and paste into new annotation to restore the text.", "Annotation Type Deleted", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return;
|
|
}
|
|
OnAnnotationRestored(ai, ai.MyItem);
|
|
RefreshRequired = true;
|
|
UpdateHistory();
|
|
myRTB.Clear();
|
|
myVFG.Clear();
|
|
}
|
|
}
|
|
if (tn.Tag is GridAuditInfo)
|
|
{
|
|
GridAuditInfo gai = tn.Tag as GridAuditInfo;
|
|
if (FlexibleMessageBox.Show(this, "Do you want to restore this table?", "Confirm Table Restore", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
|
|
{
|
|
ContentAuditInfo cai = ContentAuditInfo.Get(gai.ContentAuditID);
|
|
ROFstInfo myRoFst = null; // B2017-118 If No ROFST don't crash
|
|
if (MyItemInfo.MyDocVersion.DocVersionAssociations != null)
|
|
myRoFst = MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
|
if (myRoFst != null) myRoFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
|
|
ContentInfo ci = ContentInfo.RestoreContent(cai, myRoFst);
|
|
if (myRoFst != null) myRoFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
|
|
RefreshRequired = true;
|
|
UpdateHistory();
|
|
myRTB.Clear();
|
|
myVFG.Clear();
|
|
}
|
|
}
|
|
if (tn.Tag is ImageAuditInfo)
|
|
{
|
|
ImageAuditInfo iai = tn.Tag as ImageAuditInfo;
|
|
if (FlexibleMessageBox.Show(this, "Do you want to restore this image?", "Confirm Image Restore", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
|
|
{
|
|
ContentInfo ci = ContentInfo.RestoreImage(iai);
|
|
RefreshRequired = true;
|
|
UpdateHistory();
|
|
myRTB.Clear();
|
|
myVFG.Clear();
|
|
myPicBox.Image = null; // myPicBox is the PictureBox that shows the selected figure
|
|
}
|
|
}
|
|
}
|
|
|
|
List<string> myRoFst_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args)
|
|
{
|
|
return VlnFlexGrid.ROTableUpdate(sender, args);
|
|
}
|
|
|
|
|
|
private static UserInfo _MyUserInfo = null;
|
|
public static UserInfo MyUserInfo
|
|
{
|
|
get { return _MyUserInfo; }
|
|
set { _MyUserInfo = value; }
|
|
}
|
|
|
|
private void DisplayTagRTF(TreeNode tn)
|
|
{
|
|
if (tn.Tag != null)
|
|
{
|
|
if (tn.Tag is GridAuditInfo)
|
|
{
|
|
btnRestore.Enabled = UserInfo.CanEdit(MyUserInfo, MyProcedureInfo.MyDocVersion);//CanRestore();
|
|
GridAuditInfo gai = tn.Tag as GridAuditInfo;
|
|
myPicBox.Visible = false;
|
|
myVFG.Visible = true;
|
|
myVFG.BringToFront();
|
|
panel1.Invalidate(new Rectangle(0, 0, myVFG.Width + 4, 4));
|
|
panel1.Invalidate(new Rectangle(0, 0, 4, myVFG.Height + 4));
|
|
myRTB.Visible = false;
|
|
panel1.Visible = false;
|
|
using (StringReader sr = new StringReader(gai.Data))
|
|
{
|
|
myVFG.ReadXml(sr);
|
|
sr.Close();
|
|
}
|
|
panel1.Visible = true;
|
|
return;
|
|
}
|
|
if (tn.Tag is ImageAuditInfo)
|
|
{
|
|
btnRestore.Enabled = UserInfo.CanEdit(MyUserInfo, MyProcedureInfo.MyDocVersion);
|
|
ImageAuditInfo iai = tn.Tag as ImageAuditInfo;
|
|
myVFG.Visible = false;
|
|
myRTB.Visible = false;
|
|
myPicBox.Visible = true;
|
|
myPicBox.BringToFront();
|
|
panel1.Invalidate(new Rectangle(0, 0, myPicBox.Width + 4, 4));
|
|
panel1.Invalidate(new Rectangle(0, 0, 4, myPicBox.Height + 4));
|
|
panel1.Visible = false;
|
|
ImageInfo imgin = ImageInfo.Get(iai.ContentID);
|
|
|
|
// check if image data was compressed, i.e. config stores original size:
|
|
ImageConfig imgCfg = new ImageConfig(imgin);
|
|
byte[] imgData = iai.Data;
|
|
if (imgCfg.Image_DataSize > 0) imgData = ROImageInfo.Decompress(imgData, imgCfg.Image_DataSize);
|
|
MemoryStream ms = new MemoryStream(imgData);
|
|
myPicBox.Image = System.Drawing.Image.FromStream(ms);
|
|
myPicBox.Width = Math.Max(myPicBox.Image.Width, panel1.Width);
|
|
myPicBox.Height = Math.Max(myPicBox.Image.Height, 200);
|
|
panel1.Visible = true;
|
|
return;
|
|
}
|
|
if (tn.Tag is ContentAuditInfo)
|
|
{
|
|
btnRestore.Enabled = UserInfo.CanEdit(MyUserInfo, MyProcedureInfo.MyDocVersion);//CanRestore();
|
|
myVFG.Clear();
|
|
ContentAuditInfo cai = tn.Tag as ContentAuditInfo;
|
|
GridAuditInfoList gail = GridAuditInfoList.Get(cai.ContentID);
|
|
if (gail.Count > 0)
|
|
{
|
|
foreach (GridAuditInfo gai in gail)
|
|
{
|
|
if (gai.DTS == cai.DTS)
|
|
{
|
|
myVFG.Visible = true;
|
|
myVFG.BringToFront();
|
|
myRTB.Visible = false;
|
|
using (StringReader sr = new StringReader(gai.Data))
|
|
{
|
|
myVFG.ReadXml(sr);
|
|
sr.Close();
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
myRTB.Visible = true;
|
|
myRTB.BringToFront();
|
|
myVFG.Visible = false;
|
|
// myRTB.Font = new Font("Arial", 12, FontStyle.Regular);
|
|
// myRTB.Text = cai.Text;
|
|
//myRTB.SetupRichText("bozo", MyItemInfo.FormatStepData == null ? MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font : MyItemInfo.FormatStepData.Font);
|
|
//myRTB.LastRtf = string.Empty;
|
|
myRTB.SetupRichText(cai.Text, MyItemInfo.FormatStepData == null ? MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font : MyItemInfo.FormatStepData.Font);
|
|
}
|
|
}
|
|
if (tn.Tag is ItemAuditInfo)
|
|
{
|
|
btnRestore.Enabled = UserInfo.CanEdit(MyUserInfo, MyProcedureInfo.MyDocVersion);//CanRestore();
|
|
ItemAuditInfo iai = tn.Tag as ItemAuditInfo;
|
|
ContentAuditInfoList cail = ContentAuditInfoList.Get(iai.ContentID);
|
|
foreach (ContentAuditInfo cai in cail)
|
|
{
|
|
if (cai.DeleteStatus == iai.DeleteStatus)
|
|
{
|
|
//myRTB.Font = new Font("Arial", 12, FontStyle.Regular);
|
|
//myRTB.Text = cai.Text;
|
|
myRTB.SetupRichText(cai.Text, MyItemInfo.FormatStepData == null ? MyItemInfo.ActiveFormat.PlantFormat.FormatData.Font : MyItemInfo.FormatStepData.Font);
|
|
}
|
|
}
|
|
}
|
|
if (tn.Tag is AnnotationAuditInfo)
|
|
{
|
|
btnRestore.Enabled = UserInfo.CanEdit(MyUserInfo, MyProcedureInfo.MyDocVersion);//CanRestore();
|
|
AnnotationAuditInfo iai = tn.Tag as AnnotationAuditInfo;
|
|
myRTB.Font = new Font("Arial", 12, FontStyle.Regular);
|
|
myRTB.Rtf = iai.RtfText;
|
|
//myRTB.Rtf = iai.RtfText;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
btnRestore.Enabled = false;
|
|
myRTB.Clear();
|
|
myVFG.Clear();
|
|
}
|
|
}
|
|
private void tvAudits_AfterSelect(object sender, TreeViewEventArgs e)
|
|
{
|
|
DisplayTagRTF(e.Node);
|
|
}
|
|
private void DisplayHistory_Resize(object sender, EventArgs e)
|
|
{
|
|
tvAudits.Height = ((tcpDetail.Height - btnRestore.Height) / 4) * 3;
|
|
}
|
|
public void RefreshChangeList()
|
|
{
|
|
myTimer.Enabled = false;
|
|
myTimer.Enabled = true;
|
|
}
|
|
// B2019-161 When tracking timing time this action
|
|
private static VolianTimer _TimeActivity = new VolianTimer("DisplayHistory myTimer_Tick", 974);
|
|
|
|
private void myTimer_Tick(object sender, System.EventArgs e)
|
|
{
|
|
_TimeActivity.Open();
|
|
myTimer.Enabled = false;
|
|
if (this.lbChanges.Visible)
|
|
this.tabControl1.SelectedTab = tabItem2;
|
|
UpdateHistory();
|
|
RefreshRequired = true;
|
|
_TimeActivity.Close();
|
|
}
|
|
|
|
}
|
|
|
|
public delegate void ItemRestoredHandler(ItemInfo restoredItemInfo);
|
|
public delegate void AnnotationRestoredHandler(AnnotationInfo restoredAnnotationInfo, ItemInfo currentItem);
|
|
public delegate void DisplayHistoryReportEvent(object sender, DisplayHistoryReportEventArgs args);
|
|
public delegate void DisplayHistoryEvent(object sender, DisplayHistoryEventArgs args);
|
|
public class DisplayHistoryReportEventArgs
|
|
{
|
|
private string _ReportName;
|
|
public string ReportTitle
|
|
{
|
|
get { return _ReportName; }
|
|
set { _ReportName = value; }
|
|
}
|
|
private ProcedureInfo _ProcedureInfo;
|
|
public ProcedureInfo ProcedureInfo
|
|
{
|
|
get { return _ProcedureInfo; }
|
|
set { _ProcedureInfo = value; }
|
|
}
|
|
private ContentAuditInfoList _AuditList;
|
|
public ContentAuditInfoList AuditList
|
|
{
|
|
get { return _AuditList; }
|
|
set { _AuditList = value; }
|
|
}
|
|
private AnnotationAuditInfoList _AnnotationList;
|
|
public AnnotationAuditInfoList AnnotationList
|
|
{
|
|
get { return _AnnotationList; }
|
|
set { _AnnotationList = value; }
|
|
}
|
|
|
|
public DisplayHistoryReportEventArgs(string reportName, ProcedureInfo procedureInfo, ContentAuditInfoList auditList, AnnotationAuditInfoList annotationList)
|
|
{
|
|
_ReportName = reportName;
|
|
_ProcedureInfo = procedureInfo;
|
|
_AuditList = auditList;
|
|
_AnnotationList = annotationList;
|
|
}
|
|
}
|
|
public class DisplayHistoryEventArgs
|
|
{
|
|
private int _ItemID;
|
|
public int ItemID
|
|
{
|
|
get { return _ItemID; }
|
|
set { _ItemID = value; }
|
|
}
|
|
public DisplayHistoryEventArgs(int itemID)
|
|
{
|
|
_ItemID = itemID;
|
|
}
|
|
}
|
|
} |