Added ability to perform a profile (Determine which sections of code are using the majority of the CPU time.)

Fixed logic that determines if the debug output should be created in the PDF.
Added ability to track DB actions.
Change cursor to a wait curcor when the print button is pressed.
Added Profile debug
Added a time-out for determining if a RO.FST file is newer.
Added a property (PrintAllAtOnce) to the ItemInfo object so that the code can differentiate between objects that are being used for edit or print.
Added logic to improve print performance.  Specifically initialize a number of item properties when the procedure is loaded for printing, rather than waiting for the properties to be lazy-loaded.
Added Profile debug
Changed NextItem property to use GetNextItem method when printing.
This commit is contained in:
Rich 2015-01-19 20:49:15 +00:00
parent 1b0079388e
commit 29ffd0329c
6 changed files with 216 additions and 37 deletions

View File

@ -506,6 +506,10 @@ namespace VEPROMS
private string _MultiunitPdfLocation = string.Empty; private string _MultiunitPdfLocation = string.Empty;
private void CreatePDFs() private void CreatePDFs()
{ {
if (VlnSettings.GetCommandFlag("PROFILE")) ProfileTimer.TurnOnTracking("Profile.txt");
VEPROMS.CSLA.Library.Database.TrackDBUsage = VlnSettings.GetCommandFlag("DBTrack");
ProfileTimer.Reset();
int profileDepth = ProfileTimer.Push(">>>> CreatePdf");
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (MySessionInfo != null) if (MySessionInfo != null)
{ {
@ -525,8 +529,7 @@ namespace VEPROMS
} }
CreateDebugFiles(); CreateDebugFiles();
// If file exists, determine if overwrite checkbox allows overwrite, if not prompt. // If file exists, determine if overwrite checkbox allows overwrite, if not prompt.
Volian.Print.Library.Rtf2Pdf.PdfDebug = cbxDebug.Checked;
Volian.Print.Library.Rtf2Pdf.PdfDebug = true;
PrintWatermark pw = (btnWaterMarkOn.Checked) ? (PrintWatermark)cbxWaterMark.SelectedValue : PrintWatermark.None; PrintWatermark pw = (btnWaterMarkOn.Checked) ? (PrintWatermark)cbxWaterMark.SelectedValue : PrintWatermark.None;
// Determine change bar settings. First get from config & then see if override from dialog. // Determine change bar settings. First get from config & then see if override from dialog.
// Also check that format allows override. // Also check that format allows override.
@ -549,7 +552,7 @@ namespace VEPROMS
pbPDFsStatus.TextVisible = true; pbPDFsStatus.TextVisible = true;
pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n); pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
pbPDFsStatus.Value = i; pbPDFsStatus.Value = i;
// this.Text = string.Format("Create PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n); // this.Text = string.Format("Create PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave); MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave);
string myPDFPath = GetMultiunitPDFPath(); string myPDFPath = GetMultiunitPDFPath();
// RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered. // RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered.
@ -570,10 +573,10 @@ namespace VEPROMS
pbPDFsStatus.TextVisible = true; pbPDFsStatus.TextVisible = true;
pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n); pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
pbPDFsStatus.Value = i; pbPDFsStatus.Value = i;
// this.Text = string.Format("Create PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n); // this.Text = string.Format("Create PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave); MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave);
// RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered. // RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered.
frmPDFStatusForm frmStatus = new frmPDFStatusForm(MyProcedure, RevNumAndDate, pw.ToString(), cbxDebug.Checked, cbxOrPgBrk.Checked, cbxOpenAfterCreate2.Checked, cbxOverwritePDF2.Checked, PDFPath, cbd, txbPDFName.Text, new Point(Left, Bottom - 50), cbxBlankPgsForDuplex.Checked); frmPDFStatusForm frmStatus = new frmPDFStatusForm(MyProcedure, RevNumAndDate, pw.ToString(), cbxDebug.Checked, cbxOrPgBrk.Checked, cbxOpenAfterCreate2.Checked, cbxOverwritePDF2.Checked, PDFPath, cbd, txbPDFName.Text, new Point(Left, Bottom - 50), cbxBlankPgsForDuplex.Checked);
frmStatus.CloseWhenDone = true; frmStatus.CloseWhenDone = true;
Application.DoEvents(); Application.DoEvents();
frmStatus.CancelStop = true; frmStatus.CancelStop = true;
@ -588,13 +591,15 @@ namespace VEPROMS
pbPDFsStatus.TextVisible = true; pbPDFsStatus.TextVisible = true;
pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n); pbPDFsStatus.Text = string.Format("Creating PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
pbPDFsStatus.Value = i; pbPDFsStatus.Value = i;
// this.Text = string.Format("Create PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n); // this.Text = string.Format("Create PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
// RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered. // RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered.
int profileDepth1 = ProfileTimer.Push(">>>> GetItemAndChildren");
if (MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseTransitionModifier || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseSpecificTransitionModifier) if (MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseTransitionModifier || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseSpecificTransitionModifier)
MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave); MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave);
else else
MyProcedure = ProcedureInfo.GetItemAndChildren(MyProcedure.ItemID); MyProcedure = ProcedureInfo.GetItemAndChildren(MyProcedure.ItemID);
frmPDFStatusForm frmStatus = new frmPDFStatusForm(MyProcedure, RevNumAndDate, pw.ToString(), cbxDebug.Checked, cbxOrPgBrk.Checked, cbxOpenAfterCreate2.Checked, cbxOverwritePDF2.Checked, PDFPath, cbd, txbPDFName.Text, new Point(Left, Bottom - 50), cbxBlankPgsForDuplex.Checked); ProfileTimer.Pop(profileDepth1);
frmPDFStatusForm frmStatus = new frmPDFStatusForm(MyProcedure, RevNumAndDate, pw.ToString(), cbxDebug.Checked, cbxOrPgBrk.Checked, cbxOpenAfterCreate2.Checked, cbxOverwritePDF2.Checked, PDFPath, cbd, txbPDFName.Text, new Point(Left, Bottom - 50), cbxBlankPgsForDuplex.Checked);
frmStatus.CloseWhenDone = true; frmStatus.CloseWhenDone = true;
Application.DoEvents(); Application.DoEvents();
frmStatus.CancelStop = true; frmStatus.CancelStop = true;
@ -606,6 +611,13 @@ namespace VEPROMS
pbPDFsStatus.Visible = false; pbPDFsStatus.Visible = false;
if(!Automatic) if(!Automatic)
ShowDebugFiles(); ShowDebugFiles();
ProfileTimer.Pop(profileDepth);
ProfileTimer.ShowTimerTable();
if (VlnSettings.GetCommandFlag("DBTrack"))
{
VEPROMS.CSLA.Library.Database.TrackDBUsage = false;
VEPROMS.CSLA.Library.Database.ShowDBTracking("DBTracking.txt");
}
} }
private string GetMultiunitPDFPath() private string GetMultiunitPDFPath()
@ -642,6 +654,10 @@ namespace VEPROMS
} }
private void CreatePDF() private void CreatePDF()
{ {
if (VlnSettings.GetCommandFlag("PROFILE")) ProfileTimer.TurnOnTracking("Profile.txt");
VEPROMS.CSLA.Library.Database.TrackDBUsage = VlnSettings.GetCommandFlag("DBTrack");
ProfileTimer.Reset();
int profileDepth = ProfileTimer.Push(">>>> CreatePdf");
string message = string.Empty; string message = string.Empty;
if (!MySessionInfo.CanCheckOutItem(MyProcedure.ItemID, CheckOutType.Procedure, ref message)) if (!MySessionInfo.CanCheckOutItem(MyProcedure.ItemID, CheckOutType.Procedure, ref message))
{ {
@ -650,23 +666,34 @@ namespace VEPROMS
} }
CreateDebugFiles(); CreateDebugFiles();
// If file exists, determine if overwrite checkbox allows overwrite, if not prompt. // If file exists, determine if overwrite checkbox allows overwrite, if not prompt.
Volian.Print.Library.Rtf2Pdf.PdfDebug = true; Volian.Print.Library.Rtf2Pdf.PdfDebug = cbxDebug.Checked;
PrintWatermark pw = (btnWaterMarkOn.Checked) ? (PrintWatermark)cbxWaterMark.SelectedValue : PrintWatermark.None; PrintWatermark pw = (btnWaterMarkOn.Checked) ? (PrintWatermark)cbxWaterMark.SelectedValue : PrintWatermark.None;
// Determine change bar settings. First get from config & then see if override from dialog. // Determine change bar settings. First get from config & then see if override from dialog.
// Also check that format allows override. // Also check that format allows override.
ChangeBarDefinition cbd = DetermineChangeBarSettings(); ChangeBarDefinition cbd = DetermineChangeBarSettings();
int profileDepth2 = ProfileTimer.Push(">>>> CreatePdf.GetItemAndChildren");
if (MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave > 0 || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseTransitionModifier || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseSpecificTransitionModifier) if (MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave > 0 || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseTransitionModifier || MyProcedure.ActiveFormat.PlantFormat.FormatData.TransData.UseSpecificTransitionModifier)
MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave); MyProcedure = ProcedureInfo.GetItemAndChildrenByUnit(MyProcedure.ItemID, 0, MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave);
else else
MyProcedure = ProcedureInfo.GetItemAndChildren(MyProcedure.ItemID); MyProcedure = ProcedureInfo.GetItemAndChildren(MyProcedure.ItemID);
// RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered. // RHM 20120925 Overlay the bottom of the dialog so that cancel button is covered.
ProfileTimer.Pop(profileDepth2);
frmPDFStatusForm frmStatus = new frmPDFStatusForm(MyProcedure, RevNumAndDate, pw.ToString(), cbxDebug.Checked, cbxOrPgBrk.Checked, cbxOpenAfterCreate2.Checked, cbxOverwritePDF2.Checked, PDFPath, cbd, txbPDFName.Text, new Point(Left, Bottom - 50), cbxBlankPgsForDuplex.Checked); frmPDFStatusForm frmStatus = new frmPDFStatusForm(MyProcedure, RevNumAndDate, pw.ToString(), cbxDebug.Checked, cbxOrPgBrk.Checked, cbxOpenAfterCreate2.Checked, cbxOverwritePDF2.Checked, PDFPath, cbd, txbPDFName.Text, new Point(Left, Bottom - 50), cbxBlankPgsForDuplex.Checked);
frmStatus.MakePlaceKeeper = cbxGeneratePlacekeeper.Checked; frmStatus.MakePlaceKeeper = cbxGeneratePlacekeeper.Checked;
int profileDepth3 = ProfileTimer.Push(">>>> frmStatus");
frmStatus.ShowDialog(); frmStatus.ShowDialog();
ProfileTimer.Pop(profileDepth3);
MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave = 0; MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
this.Close(); this.Close();
ShowDebugFiles(); ShowDebugFiles();
ProfileTimer.Pop(profileDepth);
ProfileTimer.ShowTimerTable();
if (VlnSettings.GetCommandFlag("DBTrack"))
{
VEPROMS.CSLA.Library.Database.TrackDBUsage = false;
VEPROMS.CSLA.Library.Database.ShowDBTracking("DBTracking.txt");
}
} }
// Determine if any dialog selections for change bars have overridden the data // Determine if any dialog selections for change bars have overridden the data
@ -723,11 +750,13 @@ namespace VEPROMS
Rtf2iTextSharp.DoingComparison = cbxDebug.Checked; Rtf2iTextSharp.DoingComparison = cbxDebug.Checked;
if (_AllProcedures) if (_AllProcedures)
{ {
this.Cursor = Cursors.WaitCursor;
DateTime dtStart = DateTime.Now; DateTime dtStart = DateTime.Now;
_MultiunitPdfLocation = cbxMultiunitPdfLocation.SelectedItem.ToString(); _MultiunitPdfLocation = cbxMultiunitPdfLocation.SelectedItem.ToString();
PromsPrinter.ClearTransPageNumProblems(); PromsPrinter.ClearTransPageNumProblems();
CreatePDFs(); CreatePDFs();
PromsPrinter.ReportTransPageNumProblems(); PromsPrinter.ReportTransPageNumProblems();
this.Cursor = Cursors.Default;
if (VlnSettings.DebugMode) if (VlnSettings.DebugMode)
{ {
MessageBox.Show(string.Format("{0} Minutes to Print All Procedures" MessageBox.Show(string.Format("{0} Minutes to Print All Procedures"
@ -741,7 +770,11 @@ namespace VEPROMS
this.Close(); this.Close();
} }
else else
{
this.Cursor = Cursors.WaitCursor;
CreatePDF(); CreatePDF();
this.Cursor = Cursors.Default;
}
} }
private bool _Initializing = false; private bool _Initializing = false;
private void tbSettings_Click(object sender, EventArgs e) private void tbSettings_Click(object sender, EventArgs e)

View File

@ -123,7 +123,9 @@ namespace VEPROMS
if (!CancelStop) PromsPrinter.ClearTransPageNumProblems(); if (!CancelStop) PromsPrinter.ClearTransPageNumProblems();
do do
{ {
int profileDepth = ProfileTimer.Push(">>>> MyPromsPrinter.Print");
_PdfFile = MyPromsPrinter.Print(PDFPath, MakePlaceKeeper); _PdfFile = MyPromsPrinter.Print(PDFPath, MakePlaceKeeper);
ProfileTimer.Pop(profileDepth);
} }
while (_PdfFile == null && MessageBox.Show("Try Again?", "PDF Creation Failed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes); while (_PdfFile == null && MessageBox.Show("Try Again?", "PDF Creation Failed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes);
if (_PdfFile == null) if (_PdfFile == null)

View File

@ -15,6 +15,7 @@ using Csla;
using Csla.Data; using Csla.Data;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Threading;
//using VEPROMS.Properties; //using VEPROMS.Properties;
namespace VEPROMS.CSLA.Library namespace VEPROMS.CSLA.Library
@ -164,6 +165,27 @@ namespace VEPROMS.CSLA.Library
} }
public partial class DocVersionInfo : IVEDrillDownReadOnly public partial class DocVersionInfo : IVEDrillDownReadOnly
{ {
public TimeSpan tsTimeOut = TimeSpan.FromSeconds(6);
public bool pathExists(string path)
{
bool exists = true;
Thread t = new Thread(
new ThreadStart(delegate()
{
exists = System.IO.File.Exists(path);
})
);
t.Start();
bool completed = t.Join(tsTimeOut); //wait 6 seconds then 3 then 1.5 then .75 seconds
if (!completed)
{
exists = false;
t.Abort();
if (tsTimeOut > TimeSpan.FromSeconds(1))
tsTimeOut = TimeSpan.FromTicks( tsTimeOut.Ticks / 2);
}
return exists;
}
public bool NewerRoFst public bool NewerRoFst
{ {
get get
@ -172,7 +194,12 @@ namespace VEPROMS.CSLA.Library
ROFstInfo roFstInfo = ROFstInfo.GetJustROFst(DocVersionAssociations[0].ROFstID); ROFstInfo roFstInfo = ROFstInfo.GetJustROFst(DocVersionAssociations[0].ROFstID);
RODbInfo rdi = RODbInfo.GetJustRODB(roFstInfo.RODbID); RODbInfo rdi = RODbInfo.GetJustRODB(roFstInfo.RODbID);
string rofstPath = rdi.FolderPath + @"\ro.fst"; string rofstPath = rdi.FolderPath + @"\ro.fst";
if (!File.Exists(rofstPath)) return false; //if (!File.Exists(rofstPath)) return false;
if (!pathExists(rofstPath))
{
_MyLog.WarnFormat("RO Path '{0}' could not be found", rofstPath);
return false;
}
FileInfo fiRofst = new FileInfo(rofstPath); FileInfo fiRofst = new FileInfo(rofstPath);
// if the database Ro.Fst is newer or if the files have identical DTS, // if the database Ro.Fst is newer or if the files have identical DTS,

View File

@ -10,6 +10,7 @@ using System.Data.SqlClient;
using System.Xml; using System.Xml;
using System.Drawing; using System.Drawing;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Volian.Base.Library;
namespace VEPROMS.CSLA.Library namespace VEPROMS.CSLA.Library
{ {
@ -324,6 +325,12 @@ namespace VEPROMS.CSLA.Library
#region ItemInfo #region ItemInfo
public partial class ItemInfo : IVEDrillDownReadOnly public partial class ItemInfo : IVEDrillDownReadOnly
{ {
private bool _PrintAllAtOnce = false;
public bool PrintAllAtOnce
{
get { return _PrintAllAtOnce; }
set { _PrintAllAtOnce = value; }
}
public SectionInfo GetSectionInfo() public SectionInfo GetSectionInfo()
{ {
if (this is SectionInfo) return this as SectionInfo; if (this is SectionInfo) return this as SectionInfo;
@ -439,6 +446,50 @@ namespace VEPROMS.CSLA.Library
// return ii._ItemID == _ItemID; // return ii._ItemID == _ItemID;
// return false; // return false;
//} //}
internal static void SetFromType(ItemInfo myItemInfo)
{
myItemInfo.PrintAllAtOnce = true;
if (myItemInfo.MyContent.ContentPartCount > 0)
{
foreach (PartInfo pi in myItemInfo.MyContent.ContentParts)
{
ItemInfo il = null;
switch ((E_FromType)pi.FromType)
{
case E_FromType.Procedure:
myItemInfo._Procedures = pi.MyItems;
break;
case E_FromType.Section:
myItemInfo._Sections = pi.MyItems;
break;
case E_FromType.Step:
myItemInfo._Steps = pi.MyItems;
break;
case E_FromType.Caution:
myItemInfo._Cautions = pi.MyItems;
break;
case E_FromType.Note:
myItemInfo._Notes = pi.MyItems;
break;
case E_FromType.RNO:
myItemInfo._RNOs = pi.MyItems;
break;
case E_FromType.Table:
myItemInfo._Tables = pi.MyItems;
break;
}
foreach (ItemInfo ii in pi.MyItems)
{
if (ii.ItemID == 95759)
Console.WriteLine("\"SetFromType\",{0},{1},\"{2}\",{3}", ii.ItemID, ii.MyContent.Type, ii.DisplayNumber, ii.MyItemInfoUnique);
ii.FromType = (E_FromType)pi.FromType;
SetFromType(ii);
ii.MyPrevious = il;
il = ii;
}
}
}
}
internal static void SetParentSectionAndDocVersion(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, ProcedureInfo procInfo, DocVersionInfo docVersionInfo) internal static void SetParentSectionAndDocVersion(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, ProcedureInfo procInfo, DocVersionInfo docVersionInfo)
{ {
if (itemInfo == null) return; if (itemInfo == null) return;
@ -448,15 +499,22 @@ namespace VEPROMS.CSLA.Library
// Fix for Active Section when printing. BGE_OI4 OI27D-2 // Fix for Active Section when printing. BGE_OI4 OI27D-2
//itemInfo.ActiveSection = (itemInfo as SectionInfo) ?? sectionInfo;// - possible fix for not accessing correct format //itemInfo.ActiveSection = (itemInfo as SectionInfo) ?? sectionInfo;// - possible fix for not accessing correct format
itemInfo.ActiveSection = sectionInfo; itemInfo.ActiveSection = sectionInfo;
itemInfo.ActiveFormat = sectionInfo == null ? itemParent.ActiveFormat : sectionInfo.ActiveFormat;
itemInfo.MyProcedure = procInfo; itemInfo.MyProcedure = procInfo;
itemInfo.MyDocVersion = docVersionInfo; itemInfo.MyDocVersion = docVersionInfo;
if (itemInfo.IsStep) if (itemInfo.IsStep)
{ {
ItemInfo ip = itemParent as ItemInfo; ItemInfo ip = itemParent as ItemInfo;
int profileDepth = ProfileTimer.Push(">>>> itemInfo.CombinedTab");
itemInfo.CombinedTab = (ip == null) ? itemInfo.MyTab.CleanText.Trim() : GetCombinedTab(itemInfo, ip.CombinedTab); itemInfo.CombinedTab = (ip == null) ? itemInfo.MyTab.CleanText.Trim() : GetCombinedTab(itemInfo, ip.CombinedTab);
ProfileTimer.Pop(profileDepth);
} }
if (itemInfo.MyContent.ContentGridCount > 0) if (itemInfo.MyContent.ContentGridCount > 0)
{
int profileDepth1 = ProfileTimer.Push(">>>> itemInfo.MyContent.LoadNonCachedGrid");
itemInfo.MyContent.LoadNonCachedGrid(); itemInfo.MyContent.LoadNonCachedGrid();
ProfileTimer.Pop(profileDepth1);
}
if (itemInfo.MyContent.ContentPartCount > 0) if (itemInfo.MyContent.ContentPartCount > 0)
foreach (PartInfo pi in itemInfo.MyContent.ContentParts) foreach (PartInfo pi in itemInfo.MyContent.ContentParts)
{ {
@ -530,14 +588,15 @@ namespace VEPROMS.CSLA.Library
internal static string GetCombinedTab(ItemInfo itemInfo, string parTab) internal static string GetCombinedTab(ItemInfo itemInfo, string parTab)
{ {
string pTab = parTab == null ? "" : parTab; string pTab = parTab == null ? "" : parTab;
int profileDepth = ProfileTimer.Push( ">>>> itemInfo.MyTab.CleanText.Trim");
string thisTab = itemInfo.MyTab.CleanText.Trim(); string thisTab = itemInfo.MyTab.CleanText.Trim();
ProfileTimer.Pop(profileDepth);
if (thisTab != null && thisTab != "" && !char.IsLetterOrDigit(thisTab[0])) return pTab; if (thisTab != null && thisTab != "" && !char.IsLetterOrDigit(thisTab[0])) return pTab;
if (itemInfo.FormatStepData.NumberWithLevel) pTab = itemInfo.MyHLS.MyTab.CleanText.Trim(); if (itemInfo.FormatStepData.NumberWithLevel) pTab = itemInfo.MyHLS.MyTab.CleanText.Trim();
// if the parent tab ends with a alphanumeric and this tab is alphanumeric, add a '.' to separate them // if the parent tab ends with a alphanumeric and this tab is alphanumeric, add a '.' to separate them
bool ms = pTab != "" && char.IsLetterOrDigit(pTab.TrimEnd()[pTab.Length - 1]); // parent tab ends with alphanumeric bool ms = pTab != "" && char.IsLetterOrDigit(pTab.TrimEnd()[pTab.Length - 1]); // parent tab ends with alphanumeric
bool mn = thisTab.TrimStart().Length > 0 && char.IsLetterOrDigit(thisTab.TrimStart()[0]);// this starts with alpha bool mn = thisTab.TrimStart().Length > 0 && char.IsLetterOrDigit(thisTab.TrimStart()[0]);// this starts with alpha
if (ms && mn) pTab = pTab.TrimEnd() + "."; if (ms && mn) pTab = pTab.TrimEnd() + ".";
// remove ending '.' (if this is a hls, don't remove the '.') // remove ending '.' (if this is a hls, don't remove the '.')
if (!itemInfo.IsHigh && thisTab.EndsWith(".")) thisTab = thisTab.Substring(0, thisTab.Length - 1); if (!itemInfo.IsHigh && thisTab.EndsWith(".")) thisTab = thisTab.Substring(0, thisTab.Length - 1);
return pTab + thisTab.Trim(); return pTab + thisTab.Trim();
@ -550,6 +609,7 @@ namespace VEPROMS.CSLA.Library
itemInfo.MyParent = itemParent as ItemInfo; itemInfo.MyParent = itemParent as ItemInfo;
// itemInfo.ActiveSection = (itemInfo as SectionInfo) ?? sectionInfo; // itemInfo.ActiveSection = (itemInfo as SectionInfo) ?? sectionInfo;
itemInfo.ActiveSection = sectionInfo; itemInfo.ActiveSection = sectionInfo;
itemInfo.ActiveFormat = sectionInfo == null ? itemParent.ActiveFormat : sectionInfo.ActiveFormat;
itemInfo.MyDocVersion = docVersionInfo; itemInfo.MyDocVersion = docVersionInfo;
if (itemInfo.IsStep) if (itemInfo.IsStep)
{ {
@ -1137,10 +1197,23 @@ namespace VEPROMS.CSLA.Library
} }
#endregion #endregion
#region IsType #region IsType
private E_FromType? _FromType = null;
public E_FromType? FromType
{
get
{
if (ItemID == 95759 && _FromType == null)
Console.WriteLine("\"Null FromType\",{0},{1},\"{2}\",{3}", ItemID, MyContent.Type,DisplayNumber,MyItemInfoUnique);
return _FromType;
}
set { _FromType = value; }
}
public bool IsFirstCautionPart public bool IsFirstCautionPart
{ {
get get
{ {
if (FromType != null)
return (MyPrevious == null && FromType == E_FromType.Caution);
return ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.Caution)); return ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.Caution));
} }
} }
@ -1148,6 +1221,8 @@ namespace VEPROMS.CSLA.Library
{ {
get get
{ {
if (FromType != null)
return (MyPrevious == null && FromType == E_FromType.Note);
return ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.Note)); return ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.Note));
} }
} }
@ -1156,6 +1231,8 @@ namespace VEPROMS.CSLA.Library
{ {
get get
{ {
if (FromType != null)
return (FromType == E_FromType.Caution);
return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Caution)); return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Caution));
} }
} }
@ -1163,6 +1240,8 @@ namespace VEPROMS.CSLA.Library
{ {
get get
{ {
if (FromType != null)
return (FromType == E_FromType.Note);
return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Note)); return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Note));
} }
} }
@ -1322,20 +1401,29 @@ namespace VEPROMS.CSLA.Library
return IsType("ContAcSequential"); return IsType("ContAcSequential");
} }
} }
private bool? _IsHigh = null;
public bool IsHigh public bool IsHigh
{ {
get get
{ {
if (_IsHigh != null) return (bool)_IsHigh;
int profileDepth = ProfileTimer.Push(">>>> BeginIsHigh");
// check to see if ActiveParent is a section, if so it is a high level step // check to see if ActiveParent is a section, if so it is a high level step
if (MyContent.Type / 10000 != 2) return false; if (MyContent.Type / 10000 != 2) _IsHigh = false;
ItemInfo parent = ActiveParent as ItemInfo; else
if (parent == null) return false; {
// IsHigh was returning true if this item is a caution or note off of a section.. ItemInfo parent = ActiveParent as ItemInfo;
// from the (parent.MyContent.Type / 1000) == 1. if (parent == null) _IsHigh = false;
if (IsCaution || IsNote) return false; // IsHigh was returning true if this item is a caution or note off of a section..
if ((parent.MyContent.Type / 10000) == 1) // from the (parent.MyContent.Type / 1000) == 1.
return true; else if ((parent.MyContent.Type / 10000) != 1)
return false; _IsHigh = false;
else if (IsCaution || IsNote) _IsHigh = false;
else _IsHigh = true;
}
ProfileTimer.Pop(profileDepth);
return (bool)_IsHigh;
} }
} }
public bool IsSequential public bool IsSequential
@ -1365,6 +1453,8 @@ namespace VEPROMS.CSLA.Library
{ {
get get
{ {
if (FromType != null)
return (FromType == E_FromType.Table);
return ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.Table)); return ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.Table));
} }
} }
@ -1372,7 +1462,10 @@ namespace VEPROMS.CSLA.Library
{ {
get get
{ {
return ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.RNO)); if (FromType != null)
return (FromType == E_FromType.RNO);
bool retval = ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.RNO));
return retval;
} }
} }
public bool IsInRNO public bool IsInRNO
@ -1541,6 +1634,8 @@ namespace VEPROMS.CSLA.Library
{ {
get get
{ {
if (FromType != null)
return (FromType == E_FromType.Procedure);
return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Procedure)); return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Procedure));
} }
} }
@ -1548,6 +1643,8 @@ namespace VEPROMS.CSLA.Library
{ {
get get
{ {
if (FromType != null)
return (FromType == E_FromType.Section);
return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Section)); return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Section));
} }
} }
@ -1555,6 +1652,8 @@ namespace VEPROMS.CSLA.Library
{ {
get get
{ {
if (FromType != null)
return (FromType == E_FromType.Step);
return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Step)); return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Step));
} }
} }
@ -2224,6 +2323,7 @@ namespace VEPROMS.CSLA.Library
//if (ItemDocVersionCount > 0) return ItemDocVersions[0]; Need to create one interface to support Folders, DocVersions and Items //if (ItemDocVersionCount > 0) return ItemDocVersions[0]; Need to create one interface to support Folders, DocVersions and Items
ContentInfo parentContent = ParentContent; ContentInfo parentContent = ParentContent;
if (parentContent == null || parentContent.ContentItemCount == 0) return null; if (parentContent == null || parentContent.ContentItemCount == 0) return null;
if (parentContent.ContentItems.Count == 0) return null;
_MyParent = parentContent.ContentItems[0]; _MyParent = parentContent.ContentItems[0];
} }
return _MyParent; return _MyParent;
@ -2643,11 +2743,15 @@ namespace VEPROMS.CSLA.Library
{ {
get get
{ {
//if (_ActiveFormat == null) // jsj added check for NULL ActiveParent if (_ActiveFormat == null || !PrintAllAtOnce) // jsj added check for NULL ActiveParent
_ActiveFormat = (LocalFormat != null ? LocalFormat : (ActiveParent != null) ? ActiveParent.ActiveFormat : null); _ActiveFormat = (LocalFormat != null ? LocalFormat : (ActiveParent != null) ? ActiveParent.ActiveFormat : null);
//Console.WriteLine("Active {0}", (_ActiveFormat == null) ? "_ActiveFormat is null" : _ActiveFormat.Name); //Console.WriteLine("Active {0}", (_ActiveFormat == null) ? "_ActiveFormat is null" : _ActiveFormat.Name);
return _ActiveFormat; return _ActiveFormat;
} }
set
{
_ActiveFormat = value;
}
//get { return LocalFormat != null ? LocalFormat : ActiveParent.ActiveFormat; } //get { return LocalFormat != null ? LocalFormat : ActiveParent.ActiveFormat; }
} }
public FormatInfo LocalFormat public FormatInfo LocalFormat
@ -3236,6 +3340,7 @@ namespace VEPROMS.CSLA.Library
public int GetStepLevel() // ref int bias) public int GetStepLevel() // ref int bias)
{ {
int profileDepth = ProfileTimer.Push(">>>> GetStepLevel");
int level = 0; int level = 0;
ItemInfo par = this; ItemInfo par = this;
ItemInfo LastRNO = null; ItemInfo LastRNO = null;
@ -3297,6 +3402,7 @@ namespace VEPROMS.CSLA.Library
if (MyDocStyle != null && (MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_SkipTwoStepLevels) == E_DocStructStyle.DSS_SkipTwoStepLevels && level == 0) if (MyDocStyle != null && (MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_SkipTwoStepLevels) == E_DocStructStyle.DSS_SkipTwoStepLevels && level == 0)
level += 2; level += 2;
if (level < 0) level = 0; if (level < 0) level = 0;
ProfileTimer.Pop(profileDepth);
return level; return level;
} }
public int CurrentSectionLevel() public int CurrentSectionLevel()
@ -3402,15 +3508,16 @@ namespace VEPROMS.CSLA.Library
// for calvert alarms, need to check if next item is a different type, if a different type. // for calvert alarms, need to check if next item is a different type, if a different type.
// If it is the same type, clear the header so that the header text isn't printed two times. // If it is the same type, clear the header so that the header text isn't printed two times.
bool specialCalvertAlarm = false; bool specialCalvertAlarm = false;
ItemInfo nextItem = NextItem;
if (ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertAlarm) if (ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertAlarm)
{ {
if (GetNextItem() != null && MyContent.Type != GetNextItem().MyContent.Type) specialCalvertAlarm = true; if (nextItem != null && MyContent.Type != nextItem.MyContent.Type) specialCalvertAlarm = true;
} }
if (NextItem != null && !specialCalvertAlarm) if (nextItem != null && !specialCalvertAlarm)
{ {
nextStepData = NextItem.FormatStepData; nextStepData = nextItem.FormatStepData;
// tried to duplicate functionality from 16-bit code. // tried to duplicate functionality from 16-bit code.
nextTbFormat = NextItem.IsInRNO ? nextStepData.TabData.RNOIdentPrint : nextStepData.TabData.IdentPrint; nextTbFormat = nextItem.IsInRNO ? nextStepData.TabData.RNOIdentPrint : nextStepData.TabData.IdentPrint;
nextTbFormat = ReplaceStepToken(nextTbFormat); nextTbFormat = ReplaceStepToken(nextTbFormat);
} }
// Handle the centered tab - if this tab is centered make it a header. // Handle the centered tab - if this tab is centered make it a header.
@ -3423,7 +3530,7 @@ namespace VEPROMS.CSLA.Library
// use of the MixCautionsAndNotes format flag - no bullet is used, if more that one replace the tab // use of the MixCautionsAndNotes format flag - no bullet is used, if more that one replace the tab
// with a bullet. Also, if only one in group and tab text ends with 'S', remove it: // with a bullet. Also, if only one in group and tab text ends with 'S', remove it:
bool mixCandN = MixCautionNotesDiffType(); bool mixCandN = MixCautionNotesDiffType();
if ((MyPrevious == null && (NextItem == null||specialCalvertAlarm)) || mixCandN || FormatStepData.SeparateBox) if ((MyPrevious == null && (nextItem == null||specialCalvertAlarm)) || mixCandN || FormatStepData.SeparateBox)
{ {
if (_MyHeader.CleanText.ToUpper().EndsWith("S")) if (_MyHeader.CleanText.ToUpper().EndsWith("S"))
{ {
@ -3452,7 +3559,7 @@ namespace VEPROMS.CSLA.Library
else else
_MyHeader = null; _MyHeader = null;
} }
else if (this.NextItem == null) else if (nextItem == null)
tbformat = ""; tbformat = "";
} }
if (!this.FormatStepData.SeparateBox) if (!this.FormatStepData.SeparateBox)
@ -3483,10 +3590,10 @@ namespace VEPROMS.CSLA.Library
else if (FormatStepData.TabData.IsTransition) else if (FormatStepData.TabData.IsTransition)
return tbformat; return tbformat;
// else if this has a next // else if this has a next
else if (tbformat != null && NextItem != null && !FormatStepData.AlwaysTab && else if (tbformat != null && nextItem != null && !FormatStepData.AlwaysTab &&
(!FormatStepData.MixCautionsAndNotes || (!FormatStepData.MixCautionsAndNotes ||
(FormatStepData.TabData.UsePreviousStyle && !nextStepData.TabData.UsePreviousStyle && tbformat == nextTbFormat) || (FormatStepData.TabData.UsePreviousStyle && !nextStepData.TabData.UsePreviousStyle && tbformat == nextTbFormat) ||
((prevTbFormat != tbformat && (NextItem.MyContent.Type == (int)(MyContent.Type % 10000)))))) ((prevTbFormat != tbformat && (nextItem.MyContent.Type == (int)(MyContent.Type % 10000))))))
{ {
tbformat = tbformat + ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.IdentB; tbformat = tbformat + ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.IdentB;
//string bstr = ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.IdentB; //string bstr = ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.IdentB;
@ -3525,12 +3632,12 @@ namespace VEPROMS.CSLA.Library
if (ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertAlarm || ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert) if (ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertAlarm || ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert)
{ {
if (MyPrevious != null && MyContent.Type != MyPrevious.MyContent.Type) return false; if (MyPrevious != null && MyContent.Type != MyPrevious.MyContent.Type) return false;
if (GetNextItem() != null && MyContent.Type != GetNextItem().MyContent.Type) return false; if (NextItem != null && MyContent.Type != NextItem.MyContent.Type) return false;
} }
if (!FormatStepData.MixCautionsAndNotes) return false; if (!FormatStepData.MixCautionsAndNotes) return false;
if (IsNote && ((GetNextItem() != null && GetNextItem().IsCaution) || (MyPrevious != null && MyPrevious.IsCaution))) return true; if (IsNote && ((NextItem != null && NextItem.IsCaution) || (MyPrevious != null && MyPrevious.IsCaution))) return true;
if (IsCaution && ((GetNextItem() != null && GetNextItem().IsNote) || (MyPrevious != null && MyPrevious.IsNote))) return true; if (IsCaution && ((NextItem != null && NextItem.IsNote) || (MyPrevious != null && MyPrevious.IsNote))) return true;
return false; return false;
} }
@ -5143,6 +5250,8 @@ namespace VEPROMS.CSLA.Library
tranLookup.NewLookupNeeded += new TransitionLookupEvent(GetNewLookup); tranLookup.NewLookupNeeded += new TransitionLookupEvent(GetNewLookup);
//ItemInfo.ResetTicks(); //ItemInfo.ResetTicks();
//DateTime dt = DateTime.Now; //DateTime dt = DateTime.Now;
tmp.FromType = E_FromType.Procedure;
SetFromType(tmp);
SetParentSectionAndDocVersion(tmp, tmp.MyDocVersion, null, tmp.MyDocVersion, tranLookup); SetParentSectionAndDocVersion(tmp, tmp.MyDocVersion, null, tmp.MyDocVersion, tranLookup);
//TimeSpan ts = DateTime.Now.Subtract(dt); //TimeSpan ts = DateTime.Now.Subtract(dt);
//ticksItems = ts.Ticks - (ticksROUsage + ticksTrans); //ticksItems = ts.Ticks - (ticksROUsage + ticksTrans);
@ -5155,7 +5264,6 @@ namespace VEPROMS.CSLA.Library
throw new DbCslaException("Error on ItemInfoList.GetChildren", ex); throw new DbCslaException("Error on ItemInfoList.GetChildren", ex);
} }
} }
public static ProcedureInfo GetNewLookup(object sender, TransitionLookupEventArgs args) public static ProcedureInfo GetNewLookup(object sender, TransitionLookupEventArgs args)
{ {
ProcedureInfo tmp = DataPortal.Fetch<ProcedureInfo>(new ItemAndChildrenByUnitCriteria(args.ProcID, 0, args.UnitID)); ProcedureInfo tmp = DataPortal.Fetch<ProcedureInfo>(new ItemAndChildrenByUnitCriteria(args.ProcID, 0, args.UnitID));
@ -5171,6 +5279,8 @@ namespace VEPROMS.CSLA.Library
//{ //{
tmp.MyDocVersion.DocVersionConfig.SelectedSlave = args.UnitID; tmp.MyDocVersion.DocVersionConfig.SelectedSlave = args.UnitID;
(tmp.MyConfig as ProcedureConfig).SelectedSlave = args.UnitID; (tmp.MyConfig as ProcedureConfig).SelectedSlave = args.UnitID;
tmp.FromType = E_FromType.Procedure;
SetFromType(tmp);
ItemInfo.SetParentSectionAndDocVersion(tmp, tmp.MyDocVersion, null, tmp, tmp.MyDocVersion); ItemInfo.SetParentSectionAndDocVersion(tmp, tmp.MyDocVersion, null, tmp, tmp.MyDocVersion);
//} //}
} }
@ -5313,7 +5423,13 @@ namespace VEPROMS.CSLA.Library
//AddToCache(tmp); //AddToCache(tmp);
if (tmp.ErrorMessage == "No Record Found") tmp = null; if (tmp.ErrorMessage == "No Record Found") tmp = null;
if (tmp != null) if (tmp != null)
{
int profileDepth = ProfileTimer.Push(">>>> SetParentSectionAndDocVersion");
tmp.FromType = E_FromType.Procedure;
SetFromType(tmp);
SetParentSectionAndDocVersion(tmp, tmp.MyDocVersion, null, tmp, tmp.MyDocVersion); SetParentSectionAndDocVersion(tmp, tmp.MyDocVersion, null, tmp, tmp.MyDocVersion);
ProfileTimer.Pop(profileDepth);
}
return tmp; return tmp;
} }
catch (Exception ex) catch (Exception ex)

View File

@ -991,6 +991,7 @@ namespace VEPROMS.CSLA.Library
{ {
get get
{ {
if (PrintAllAtOnce) return GetNextItem();
if (NextItemCount > 0 && NextItems != null && NextItems.Count > 0) if (NextItemCount > 0 && NextItems != null && NextItems.Count > 0)
return NextItems[0]; return NextItems[0];
return null; return null;

View File

@ -1030,12 +1030,12 @@ namespace VEPROMS.CSLA.Library
} }
return next.NextItem; return next.NextItem;
} }
while (next.GetNextItem() == null) while (next.NextItem == null)
{ {
next = next.ActiveParent as ItemInfo; next = next.ActiveParent as ItemInfo;
if(next == null) throw(new Exception("Cannot find Next Item")); if(next == null) throw(new Exception("Cannot find Next Item"));
} }
return next.GetNextItem(); return next.NextItem;
} }
private static bool AddOptionalTranGetSectionHdr(TransitionBuilder tb) private static bool AddOptionalTranGetSectionHdr(TransitionBuilder tb)
{ {