Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 45e78ef184 | |||
| fe7c5893bb | |||
| 2b57c552d1 | |||
| 7f0d39b684 | |||
| a544a5cd4f | |||
| ff9ade75d4 | |||
| cfd5498521 | |||
| 9b7c30e1cd | |||
| 670e5d7fa9 | |||
| 8258235611 | |||
| 4d97f29943 | |||
| ab8d59eb2d | |||
| c324fa69b2 | |||
| 1cdb9b4cc2 | |||
| f47fa49b80 | |||
| 6ade96c7ef | |||
| 61d31a3c67 | |||
| 014509ea30 | |||
| b6da13a653 |
+118
-40
@@ -456,7 +456,7 @@ namespace Baseline
|
|||||||
switch (myLast)
|
switch (myLast)
|
||||||
{
|
{
|
||||||
case LastWas.Pagination:
|
case LastWas.Pagination:
|
||||||
line = OpenPDF(line);
|
OpenPDF(line);
|
||||||
break;
|
break;
|
||||||
case LastWas.Baseline: // TODO: Need to add code here to open matching file
|
case LastWas.Baseline: // TODO: Need to add code here to open matching file
|
||||||
OpenOnePDF(myLine,1);
|
OpenOnePDF(myLine,1);
|
||||||
@@ -479,7 +479,7 @@ namespace Baseline
|
|||||||
switch (myLast)
|
switch (myLast)
|
||||||
{
|
{
|
||||||
case LastWas.Pagination:
|
case LastWas.Pagination:
|
||||||
line = OpenPDF(line);
|
OpenPDF(line);
|
||||||
break;
|
break;
|
||||||
case LastWas.Baseline: // TODO: Need to add code here to open matching file
|
case LastWas.Baseline: // TODO: Need to add code here to open matching file
|
||||||
OpenOnePDF(myLine,2);
|
OpenOnePDF(myLine,2);
|
||||||
@@ -491,34 +491,99 @@ namespace Baseline
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
string exePath;
|
|
||||||
private string OpenPDF(string line)
|
/// <summary>
|
||||||
|
/// This will return the full path to the PDF file
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fi"></param>
|
||||||
|
/// <param name="patern"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private string GetPFDFileAndPath(FileInfo fi, string patern)
|
||||||
{
|
{
|
||||||
int page = int.Parse(line.Substring(0, 6));
|
string[] fileList = Directory.GetFiles(fi.DirectoryName, patern);
|
||||||
|
// sort the list of file list
|
||||||
|
Array.Sort((string[])fileList);
|
||||||
|
return fileList.First(); // the PDF file that we what should be top of the list then.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This will parse out the procedure number for the PROMS ShortPath representation of a procedure section or step part
|
||||||
|
/// In the PROMS ShortPath, ".S" is used to delimit the procedure number, section then uses "..S" for the step parts
|
||||||
|
/// This method was written to handle cases where ".S" is used as part of the procedure number
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="txt"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private string ParseOutProcedureNumberFromLine(string txt)
|
||||||
|
{
|
||||||
|
// old logic was looking for the first occurence of ".S" in the txt string as the ending point of the procedure nuumber
|
||||||
|
// Beaver Valley has a procedure number "1.SBGEN" in which the old logic would not work
|
||||||
|
// 1.SBGEN.SC. ==> short path of attachment section "C"
|
||||||
|
// 1.SBGEN.SC..S1. ==> short path of Step 1 in attachment section "C"
|
||||||
|
string rtnstr = null;
|
||||||
|
int lidx = -1;
|
||||||
|
// if the item is to a high levels step or sub-step the short path as "..S" for each part of the step
|
||||||
|
// so look for the last occurence of ".." which will be the end of the section information
|
||||||
|
lidx = txt.LastIndexOf("..");
|
||||||
|
if (lidx > 0)
|
||||||
|
{
|
||||||
|
lidx = txt.LastIndexOf(".S", lidx); // this will position us to the end of the procedure number
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lidx = txt.LastIndexOf(".S"); // this will position us to the end of the procedure number if there was no step information
|
||||||
|
}
|
||||||
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
|
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
|
||||||
line = line.Substring(8, line.IndexOf(".S") - 8).Replace("/", "_").Replace("\\", "_");
|
rtnstr = txt.Substring(8, lidx - 8).Replace("/", "_").Replace("\\", "_");
|
||||||
|
return rtnstr;
|
||||||
|
}
|
||||||
|
|
||||||
|
string exePath;
|
||||||
|
private void OpenPDF(string line)
|
||||||
|
{
|
||||||
|
int pageNum = int.Parse(line.Substring(0, 6));
|
||||||
|
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
|
||||||
|
string ProcNum = ParseOutProcedureNumberFromLine(line);
|
||||||
|
string procPatern = string.Format("*{0}*.pdf", string.IsNullOrEmpty(line) ? "noProcNumber" : ProcNum);
|
||||||
|
|
||||||
FindFile ff = lbDifferent.SelectedItem as FindFile;
|
FindFile ff = lbDifferent.SelectedItem as FindFile;
|
||||||
FileInfo fi1 = new FileInfo(ff.File1);
|
FileInfo fi1 = new FileInfo(ff.File1);
|
||||||
FileInfo fi2 = new FileInfo(ff.File2);
|
FileInfo fi2 = new FileInfo(ff.File2);
|
||||||
|
string PDFfileName1 = GetPFDFileAndPath(fi1,procPatern);
|
||||||
|
string PDFfileName2 = GetPFDFileAndPath(fi2,procPatern);
|
||||||
|
if (string.IsNullOrEmpty(PDFfileName1) || string.IsNullOrEmpty(PDFfileName2)) return;
|
||||||
|
|
||||||
// If you don't know where the Reader executable is for PDFs Open a PDF and Check to see where the path points
|
// If you don't know where the Reader executable is for PDFs Open a PDF and Check to see where the path points
|
||||||
if (exePath == null)
|
if (exePath == null)
|
||||||
{
|
{
|
||||||
System.Diagnostics.Process p = System.Diagnostics.Process.Start(fi1.DirectoryName + "\\" + line + ".pdf");
|
try
|
||||||
exePath = TryToGetPath(p);
|
{
|
||||||
p.Kill(); // No need to keep it open
|
System.Diagnostics.Process p = System.Diagnostics.Process.Start(PDFfileName1);
|
||||||
|
exePath = TryToGetPath(p);
|
||||||
|
p.Kill(); // No need to keep it open
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Application.DoEvents();
|
||||||
|
string msg = string.Format("{0} - {1}", ex.GetType().Name, ex.Message);
|
||||||
|
Console.WriteLine(msg);
|
||||||
|
MessageBox.Show(msg, "Error opening default PDF Viewer");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open the first PDF on a Specific Page
|
// Open the first PDF on a Specific Page
|
||||||
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", page) + fi1.DirectoryName + "\\" + line + ".pdf ");
|
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format(" /A \"page={0}\" \"{1}\" ", pageNum,PDFfileName1));
|
||||||
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
|
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
|
||||||
// Move the PDF Reader window to 0,0
|
// Move the PDF Reader window to 0,0
|
||||||
MoveProcess(p1, 0, 0);
|
MoveProcess(p1, 0, 0);
|
||||||
// Open the first PDF on a Specific Page
|
|
||||||
System.Diagnostics.ProcessStartInfo psi2 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", page) + fi2.DirectoryName + "\\" + line + ".pdf ");
|
// Open the second PDF on a Specific Page
|
||||||
|
System.Diagnostics.ProcessStartInfo psi2 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format(" /A \"page={0}\" \"{1}\" ", pageNum, PDFfileName2));
|
||||||
System.Diagnostics.Process p2 = System.Diagnostics.Process.Start(psi2);
|
System.Diagnostics.Process p2 = System.Diagnostics.Process.Start(psi2);
|
||||||
// Move the PDF Reader window to 960,0
|
// Move the PDF Reader window to 960,0
|
||||||
// TODO: This Offset could be a Setting
|
// TODO: This Offset could be a Setting
|
||||||
MoveProcess(p2, 960, 0);
|
MoveProcess(p2, 960, 0);
|
||||||
return line;
|
return;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Try to get the location of the PDF Reader executable
|
/// Try to get the location of the PDF Reader executable
|
||||||
@@ -530,7 +595,7 @@ namespace Baseline
|
|||||||
p.WaitForInputIdle();
|
p.WaitForInputIdle();
|
||||||
while (p.MainModule == null)
|
while (p.MainModule == null)
|
||||||
{
|
{
|
||||||
Console.WriteLine("{0} - {1}", p.MainWindowTitle,p.ProcessName);
|
Console.WriteLine("{0} - {1}", p.MainWindowTitle, p.ProcessName);
|
||||||
p.WaitForInputIdle();
|
p.WaitForInputIdle();
|
||||||
Application.DoEvents();
|
Application.DoEvents();
|
||||||
}
|
}
|
||||||
@@ -594,40 +659,52 @@ namespace Baseline
|
|||||||
/// <param name="list"></param>
|
/// <param name="list"></param>
|
||||||
private void OpenOnePDF(Line myLine, int list)
|
private void OpenOnePDF(Line myLine, int list)
|
||||||
{
|
{
|
||||||
|
if (myLine == null) return; // no PDF to open
|
||||||
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
|
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
|
||||||
string proc = myLine.MyProc.Number.Replace("/","_").Replace("\\","_");
|
string proc = myLine.MyProc.Number.Replace("/","_").Replace("\\","_");
|
||||||
|
|
||||||
|
// if no procedure number, PROMS creates pdf filename "NoProcNumber.pdf"
|
||||||
|
// create pattern to use to get the PDF from the directory
|
||||||
|
// add wildcards (*) to file the file if any prefix or suffix was added to the filename
|
||||||
|
string procPatern = string.Format("*{0}*.pdf", proc == string.Empty ? "noProcNumber" : proc);
|
||||||
int pagenum = myLine.MyPage.Number;
|
int pagenum = myLine.MyPage.Number;
|
||||||
FindFile ff = lbDifferent.SelectedItem as FindFile;
|
FindFile ff = lbDifferent.SelectedItem as FindFile;
|
||||||
FileInfo fi1 = new FileInfo(ff.File1);
|
string PDFfileName = null;
|
||||||
FileInfo fi2 = new FileInfo(ff.File2);
|
|
||||||
if (exePath == null)
|
|
||||||
{
|
|
||||||
System.Diagnostics.Process p = System.Diagnostics.Process.Start(fi1.DirectoryName + "\\" + proc + ".pdf");
|
|
||||||
while (exePath == null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
|
|
||||||
exePath = p.MainModule.FileName;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Application.DoEvents();
|
|
||||||
Console.WriteLine("{0} - {1}", ex.GetType().Name, ex.Message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.Kill();
|
|
||||||
}
|
|
||||||
if (list == 1)
|
if (list == 1)
|
||||||
{
|
{
|
||||||
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", pagenum) + fi1.DirectoryName + "\\" + proc + ".pdf ");
|
FileInfo fi1 = new FileInfo(ff.File1);
|
||||||
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
|
PDFfileName = GetPFDFileAndPath(fi1, procPatern);
|
||||||
}
|
}
|
||||||
else
|
else // list == 2
|
||||||
{
|
{
|
||||||
System.Diagnostics.ProcessStartInfo psi2 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A page={0} ", pagenum) + fi2.DirectoryName + "\\" + proc + ".pdf ");
|
FileInfo fi2 = new FileInfo(ff.File2);
|
||||||
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi2);
|
PDFfileName = GetPFDFileAndPath(fi2, procPatern);
|
||||||
}
|
}
|
||||||
|
if (string.IsNullOrEmpty(PDFfileName)) return; // no PDF to open
|
||||||
|
|
||||||
|
// if exePath is null, then open the found PDF with the default PDF viewer and
|
||||||
|
// capture/save the entire name and path of the default PDF viewer
|
||||||
|
if (exePath == null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.Diagnostics.Process tp = System.Diagnostics.Process.Start(PDFfileName);
|
||||||
|
exePath = TryToGetPath(tp);
|
||||||
|
tp.Kill();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Application.DoEvents();
|
||||||
|
string msg = string.Format("{0} - {1}", ex.GetType().Name, ex.Message);
|
||||||
|
Console.WriteLine(msg);
|
||||||
|
MessageBox.Show(msg, "Error opening default PDF Viewer");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// open the PDF and jump to the page number
|
||||||
|
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A \"page={0}\" \"{1}\" ", pagenum,PDFfileName));
|
||||||
|
psi1.UseShellExecute = false;
|
||||||
|
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Perform Debug Meta file comparison for all of the folders within the automated testing folders
|
/// Perform Debug Meta file comparison for all of the folders within the automated testing folders
|
||||||
@@ -709,11 +786,12 @@ namespace Baseline
|
|||||||
private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e)
|
private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
//Initialize Results List Box
|
//Initialize Results List Box
|
||||||
lbResults1.Items.Clear();
|
|
||||||
Procedure myProc = lbProcedures.SelectedItem as Procedure;
|
Procedure myProc = lbProcedures.SelectedItem as Procedure;
|
||||||
|
if (myProc == null) return; // clicked on the white space (blank line) in the list of different procedures
|
||||||
//TODO: May need to consider if there are duplicate procedure numers and titles
|
//TODO: May need to consider if there are duplicate procedure numers and titles
|
||||||
Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title);
|
Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title);
|
||||||
// Build the results ListBox for the left window
|
// Build the results ListBox for the left window
|
||||||
|
lbResults1.Items.Clear();
|
||||||
if (myProc1 != null)
|
if (myProc1 != null)
|
||||||
{
|
{
|
||||||
foreach (Page myPage in myProc1.MyPages)
|
foreach (Page myPage in myProc1.MyPages)
|
||||||
|
|||||||
@@ -422,150 +422,6 @@ namespace LBWordLibrary
|
|||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// If document contains symbol characters, returns problem font.
|
|
||||||
/// </summary>
|
|
||||||
public string FontHasSymbolCharacters
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
LBRange myRange = Range();
|
|
||||||
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
|
|
||||||
myRange.Start = 0;
|
|
||||||
int end = myRange.End;
|
|
||||||
string myText = GetRangeText(myRange);
|
|
||||||
//return _RegFindSymbol.IsMatch(myText);
|
|
||||||
MatchCollection problems = _RegFindSymbol.Matches(myText);
|
|
||||||
int offset = 0;
|
|
||||||
List<string> alreadyProcessed = new List<string>();
|
|
||||||
List<string> fontHasSymbols = new List<string>();
|
|
||||||
foreach (Match problem in problems)
|
|
||||||
{
|
|
||||||
if (!alreadyProcessed.Contains(problem.Value))
|
|
||||||
{
|
|
||||||
myRange.Start = problem.Index + offset;
|
|
||||||
myRange.End = problem.Index + problem.Length + offset;
|
|
||||||
int newOffset = FindRangeOffset(myRange, problem, offset, end);
|
|
||||||
string fontName = myRange.Font.Name;
|
|
||||||
if (IsSymbolFont(fontName))
|
|
||||||
{
|
|
||||||
if( !fontHasSymbols.Contains(fontName))
|
|
||||||
{
|
|
||||||
fontHasSymbols.Add(fontName);
|
|
||||||
// Found symbol font
|
|
||||||
_MyLog.InfoFormat("Font '{0}' has Symbols", fontName);
|
|
||||||
}
|
|
||||||
//Console.WriteLine("Font '{0}' has Symbols", myRange.Font.Name);
|
|
||||||
//return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return myRange.Font.Name;
|
|
||||||
offset = newOffset;
|
|
||||||
alreadyProcessed.Add(problem.Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Debug Tool - Return a string containing a list of the fonts that have symbol characters.
|
|
||||||
/// </summary>
|
|
||||||
public string FontsHaveSymbolCharacters
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
string sep = "";
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
List<string> fonts=new List<string>();
|
|
||||||
LBRange myRange = Range();
|
|
||||||
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
|
|
||||||
myRange.Start = 0;
|
|
||||||
int end = myRange.End;
|
|
||||||
string myText = GetRangeText(myRange);
|
|
||||||
//return _RegFindSymbol.IsMatch(myText);
|
|
||||||
MatchCollection problems = _RegFindSymbol.Matches(myText);
|
|
||||||
int offset = 0;
|
|
||||||
foreach (Match problem in problems)
|
|
||||||
{
|
|
||||||
myRange.Start = problem.Index + offset;
|
|
||||||
myRange.End = problem.Index + problem.Length + offset;
|
|
||||||
int newOffset = FindRangeOffset(myRange, problem, offset, end);
|
|
||||||
if (!fonts.Contains(myRange.Font.Name))
|
|
||||||
{
|
|
||||||
fonts.Add(myRange.Font.Name);
|
|
||||||
sb.Append(sep + "'" + myRange.Font.Name + "'");
|
|
||||||
sep = ",";
|
|
||||||
}
|
|
||||||
offset = newOffset;
|
|
||||||
}
|
|
||||||
if (sb.Length > 0) return sb.ToString();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Debug Tool - Return a list of symbol characters using VESYMB font.
|
|
||||||
/// </summary>
|
|
||||||
public string FontsHaveSymbolCharacters2
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Dictionary<string, List<int>> fonts = new Dictionary<string, List<int>>();
|
|
||||||
LBRange myRange = Range();
|
|
||||||
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
|
|
||||||
myRange.Start = 0;
|
|
||||||
int end = myRange.End;
|
|
||||||
string myText = GetRangeText(myRange);
|
|
||||||
//return _RegFindSymbol.IsMatch(myText);
|
|
||||||
MatchCollection problems = _RegFindSymbol.Matches(myText);
|
|
||||||
int offset = 0;
|
|
||||||
foreach (Match problem in problems)
|
|
||||||
{
|
|
||||||
myRange.Start = problem.Index + offset;
|
|
||||||
myRange.End = problem.Index + problem.Length + offset;
|
|
||||||
int newOffset = FindRangeOffset(myRange, problem, offset, end);
|
|
||||||
string sFont = myRange.Font.Name;
|
|
||||||
if (sFont.ToUpper().StartsWith("VESYM"))
|
|
||||||
{
|
|
||||||
if (!fonts.ContainsKey(sFont))
|
|
||||||
{
|
|
||||||
fonts.Add(sFont, new List<int>());
|
|
||||||
}
|
|
||||||
List<int> symbols = fonts[sFont];
|
|
||||||
string myTextSymb = GetRangeText(myRange);
|
|
||||||
foreach (char c in myTextSymb)
|
|
||||||
{
|
|
||||||
if (!symbols.Contains((int)c))
|
|
||||||
symbols.Add((int)c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
offset = newOffset;
|
|
||||||
}
|
|
||||||
if (fonts.Count > 0)
|
|
||||||
{
|
|
||||||
string sep = "";
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
foreach (string font in fonts.Keys)
|
|
||||||
{
|
|
||||||
sb.Append(sep + "'" + font + "'");
|
|
||||||
sep = ",";
|
|
||||||
foreach (int i in fonts[font])
|
|
||||||
{
|
|
||||||
sb.Append(sep);
|
|
||||||
sb.Append(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sb.ToString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine("{0},{1},{2}", ex.GetType().Name, ex.Message, ex.StackTrace);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks to see if the document contains symbol characters
|
/// Checks to see if the document contains symbol characters
|
||||||
@@ -601,86 +457,7 @@ namespace LBWordLibrary
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Regex _RegFindSymbol = new Regex("[\\uF020-\\uF07F]+");
|
Regex _RegFindSymbol = new Regex("[\\uF020-\\uF07F]+");
|
||||||
/// <summary>
|
|
||||||
/// FixSymbolCharacters - Fix any symbol characters in the document
|
|
||||||
/// </summary>
|
|
||||||
public void FixSymbolCharacters()
|
|
||||||
{
|
|
||||||
// Set up range object to be used to process text
|
|
||||||
LBRange myRange = Range();
|
|
||||||
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
|
|
||||||
int end = myRange.End;
|
|
||||||
myRange.Start = 0;
|
|
||||||
string myText = GetRangeText(myRange);
|
|
||||||
MatchCollection problems = _RegFindSymbol.Matches(myText);
|
|
||||||
int offset = 0;
|
|
||||||
foreach (Match problem in problems)
|
|
||||||
{
|
|
||||||
myRange.Start = problem.Index + offset;
|
|
||||||
myRange.End = problem.Index + problem.Length + offset;
|
|
||||||
int newOffset = FindRangeOffset(myRange, problem, offset, end);
|
|
||||||
if (myRange.Font.Name == "")
|
|
||||||
{
|
|
||||||
int wrdStart = myRange.Start;
|
|
||||||
int wrdEnd = myRange.End;
|
|
||||||
int wrdMiddle = wrdStart;
|
|
||||||
while (myRange.Font.Name == "")
|
|
||||||
{
|
|
||||||
do
|
|
||||||
{
|
|
||||||
myRange.End = ++wrdMiddle;
|
|
||||||
} while(myRange.Font.Name != "");
|
|
||||||
myRange.End = wrdMiddle - 1;
|
|
||||||
ReplaceSymbolCharacters(myRange);
|
|
||||||
myRange.Start = wrdMiddle -1;
|
|
||||||
myRange.End = wrdEnd;
|
|
||||||
}
|
|
||||||
ReplaceSymbolCharacters(myRange);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ReplaceSymbolCharacters(myRange);
|
|
||||||
}
|
|
||||||
offset = newOffset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Try to fix the first character in the symbol range F000 to F0FF. If it cannot be
|
|
||||||
/// fixed, it is an indicator that the font is not installed properly. Regardless of
|
|
||||||
/// whether there is success, the change is undone so that the document will not be
|
|
||||||
/// considered dirty, i.e. will not prompt user for save.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public bool AttemptToFixASymbolCharacter()
|
|
||||||
{
|
|
||||||
// Set up range object to be used to process text
|
|
||||||
LBRange myRange = Range();
|
|
||||||
myRange = myRange.GoTo(LBWdGoToItem.wdGoToPercent, LBWdGoToDirection.wdGoToLast, 100);
|
|
||||||
|
|
||||||
int end = myRange.End;
|
|
||||||
myRange.Start = 0;
|
|
||||||
string myText = GetRangeText(myRange);
|
|
||||||
MatchCollection problems = _RegFindSymbol.Matches(myText);
|
|
||||||
if (problems.Count>0)
|
|
||||||
{
|
|
||||||
Match problem = problems[0];
|
|
||||||
myRange.Start = problem.Index;
|
|
||||||
myRange.End = myRange.Start + 1;
|
|
||||||
if (IsSymbolFont(myRange.Font.Name)) return true; // if it's a symbol font already, no issue.
|
|
||||||
string before = GetRangeText(myRange);
|
|
||||||
string updated = ReplaceSymbolCharacters(before);
|
|
||||||
myRange.Text = updated;
|
|
||||||
string after = GetRangeText(myRange);
|
|
||||||
Undo(1);
|
|
||||||
//Console.WriteLine("Undo1 results = {0}", tst);
|
|
||||||
//tst = Undo(1);
|
|
||||||
//Console.WriteLine("Undo2 results = {0}", tst);
|
|
||||||
//tst = Undo(1);
|
|
||||||
//Console.WriteLine("Undo3 results = {0}", tst);
|
|
||||||
return (updated == after);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get the Range Text with error handling. myRange.Text sometimes will get a null reference exception.
|
/// Get the Range Text with error handling. myRange.Text sometimes will get a null reference exception.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -737,35 +514,6 @@ namespace LBWordLibrary
|
|||||||
return myRange.Start - problem.Index;
|
return myRange.Start - problem.Index;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ReplaceSymbolCharacters Replaces any symbol characters in the specified range
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="myRange"></param>
|
|
||||||
private static void ReplaceSymbolCharacters(LBRange myRange)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (IsSymbolFont(myRange.Font.Name))
|
|
||||||
return;
|
|
||||||
string before = GetRangeText(myRange);
|
|
||||||
string updated = ReplaceSymbolCharacters(before);
|
|
||||||
myRange.Text = updated;
|
|
||||||
string after = GetRangeText(myRange);
|
|
||||||
if (after != updated) // If the Word text doesn't match try including a character before and after and do it again.
|
|
||||||
{
|
|
||||||
Console.WriteLine("'TryEntireRange Failed',{0},{1},'{2}','{3}','{4}'", myRange.Start, myRange.End, before, updated, after);
|
|
||||||
int end = myRange.End;
|
|
||||||
myRange.Start = myRange.Start - 1;
|
|
||||||
myRange.End = end + 1;
|
|
||||||
myRange.Text = ReplaceSymbolCharacters(GetRangeText(myRange));
|
|
||||||
Console.WriteLine("'TryEntireRange Failed',{0},{1},'{2}'", myRange.Start, myRange.End, GetRangeText(myRange));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine("'TryEntireRange Exception',{0},{1},'{2}'", myRange.Start, myRange.End, ex.Message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// ReplaceSymbolCharacters processes the string returned and changes any symbols (0xF0??) to normal characters
|
/// ReplaceSymbolCharacters processes the string returned and changes any symbols (0xF0??) to normal characters
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="str"></param>
|
/// <param name="str"></param>
|
||||||
|
|||||||
@@ -418,7 +418,7 @@ namespace ROEditor
|
|||||||
// NOTE: not doing the "Using System.Threading;" statement at beginning of file because it conflicts with the declaration of the "Timer" variable
|
// NOTE: not doing the "Using System.Threading;" statement at beginning of file because it conflicts with the declaration of the "Timer" variable
|
||||||
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
|
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
|
||||||
|
|
||||||
// The data path the was passed in.
|
// The data path the was passed in.
|
||||||
DbConnectPath = PassedInPath;
|
DbConnectPath = PassedInPath;
|
||||||
|
|
||||||
// Setup the context menu
|
// Setup the context menu
|
||||||
@@ -2844,7 +2844,8 @@ namespace ROEditor
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newt=null;
|
mnutitle = Regex.Replace(mnutitle, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString()); // RO Editor add symbols C2022
|
||||||
|
newt =null;
|
||||||
success = myrodb.RODB_WriteRO((VlnXmlElement)roTreeView.SelectedNode.Tag);
|
success = myrodb.RODB_WriteRO((VlnXmlElement)roTreeView.SelectedNode.Tag);
|
||||||
if (success==true && mnutitle != "") roTreeView.SelectedNode.Text = mnutitle; //B2021-077 make sure mnutitle has text or it will clear the node's title in the tree
|
if (success==true && mnutitle != "") roTreeView.SelectedNode.Text = mnutitle; //B2021-077 make sure mnutitle has text or it will clear the node's title in the tree
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,12 +116,12 @@ namespace ROEditor
|
|||||||
public uint thisoff;
|
public uint thisoff;
|
||||||
public string title;
|
public string title;
|
||||||
|
|
||||||
public FstTmpSTRC(ushort type, uint offset, string tl)
|
public FstTmpSTRC(ushort type, uint offset, string tl)
|
||||||
{
|
{
|
||||||
thistype = type;
|
thistype = type;
|
||||||
thisoff = offset;
|
thisoff = offset;
|
||||||
title = tl;
|
title = tl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteString(BinaryWriter bw, string str)
|
void WriteString(BinaryWriter bw, string str)
|
||||||
{
|
{
|
||||||
@@ -150,7 +150,7 @@ namespace ROEditor
|
|||||||
bw.Write(thisoff);
|
bw.Write(thisoff);
|
||||||
bw.Write(thistype);
|
bw.Write(thistype);
|
||||||
WriteString(bw,title);
|
WriteString(bw,title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The Sorted Array was not sorting via the ASCII value of each character in a given string.
|
// The Sorted Array was not sorting via the ASCII value of each character in a given string.
|
||||||
@@ -565,8 +565,8 @@ namespace ROEditor
|
|||||||
string RecIdStr = elem.GetAttribute("RecID");
|
string RecIdStr = elem.GetAttribute("RecID");
|
||||||
curRecID = System.Convert.ToUInt32(RecIdStr,16);
|
curRecID = System.Convert.ToUInt32(RecIdStr,16);
|
||||||
|
|
||||||
// Get the current node's parent id
|
// Get the current node's parent id
|
||||||
string ParIdStr = elem.GetAttribute("ParentID");
|
string ParIdStr = elem.GetAttribute("ParentID");
|
||||||
elemParentID = Convert.ToUInt32(ParIdStr,16);
|
elemParentID = Convert.ToUInt32(ParIdStr,16);
|
||||||
|
|
||||||
string HasKids = elem.GetAttribute("HasChild");
|
string HasKids = elem.GetAttribute("HasChild");
|
||||||
@@ -771,8 +771,8 @@ namespace ROEditor
|
|||||||
private ushort SaveROToFST(XmlNode RONode,ArrayList InUseList,string RtnValTmplate, string AccPageIDTplate)
|
private ushort SaveROToFST(XmlNode RONode,ArrayList InUseList,string RtnValTmplate, string AccPageIDTplate)
|
||||||
{
|
{
|
||||||
ushort RtnVal;
|
ushort RtnVal;
|
||||||
uint startFST = (uint)fhFST.BaseStream.Position;
|
uint startFST = (uint)fhFST.BaseStream.Position;
|
||||||
uint RORecID;
|
uint RORecID;
|
||||||
uint ParID;
|
uint ParID;
|
||||||
byte nullbyte=0;
|
byte nullbyte=0;
|
||||||
|
|
||||||
@@ -844,8 +844,12 @@ namespace ROEditor
|
|||||||
AccPageID = " ";
|
AccPageID = " ";
|
||||||
WriteString(AccPageID);
|
WriteString(AccPageID);
|
||||||
|
|
||||||
// Save the ID and offset entry for the current ID
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
IdsAndOffsets.Add(RORecID,startFST);
|
string moddt = ROdatabase.RODB_GetModDateTime(elem.GetAttribute("RecID"), elem.GetAttribute("Table"));
|
||||||
|
if (!string.IsNullOrEmpty(moddt)) WriteString(moddt);
|
||||||
|
|
||||||
|
// Save the ID and offset entry for the current ID
|
||||||
|
IdsAndOffsets.Add(RORecID, startFST);
|
||||||
|
|
||||||
// Save the RecID and Accessory Page id
|
// Save the RecID and Accessory Page id
|
||||||
IdsAndAccPgIds[AccPageID] = RORecID;
|
IdsAndAccPgIds[AccPageID] = RORecID;
|
||||||
|
|||||||
@@ -322,9 +322,9 @@ namespace RODBInterface
|
|||||||
get { return _PCChildList; }
|
get { return _PCChildList; }
|
||||||
set { _PCChildList = value; }
|
set { _PCChildList = value; }
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
#region abstracts // need these for each method that must be defined for each database type
|
#region abstracts // need these for each method that must be defined for each database type
|
||||||
public abstract string RODB_GetNextGroupTable();
|
public abstract string RODB_GetNextGroupTable();
|
||||||
public abstract string RODB_GetNextRecId(string table);
|
public abstract string RODB_GetNextRecId(string table);
|
||||||
public abstract bool RODB_GetRootGroups(VlnXmlElement root);
|
public abstract bool RODB_GetRootGroups(VlnXmlElement root);
|
||||||
public abstract bool RODB_DeleteGroup(XmlNode group, string tbname, string toprecid);
|
public abstract bool RODB_DeleteGroup(XmlNode group, string tbname, string toprecid);
|
||||||
@@ -355,9 +355,10 @@ namespace RODBInterface
|
|||||||
public abstract string RODB_GetDBServerForAbout();
|
public abstract string RODB_GetDBServerForAbout();
|
||||||
public abstract string RODB_HasBeenConverted();
|
public abstract string RODB_HasBeenConverted();
|
||||||
public abstract bool RODB_WriteSqlConnectToAccess(string newConectStr);
|
public abstract bool RODB_WriteSqlConnectToAccess(string newConectStr);
|
||||||
#endregion
|
public abstract string RODB_GetModDateTime(string Recid, string table);
|
||||||
|
#endregion
|
||||||
|
|
||||||
public RODB()
|
public RODB()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2382,9 +2383,9 @@ namespace RODBInterface
|
|||||||
RecID = DBE.GetString(0);
|
RecID = DBE.GetString(0);
|
||||||
MyRecID = RecID;
|
MyRecID = RecID;
|
||||||
Info = DBE.GetString(1);
|
Info = DBE.GetString(1);
|
||||||
// it's defined in the local table if the first character is "<" which starts
|
// it's defined in the local table if the first character is "<" which starts
|
||||||
// the schema definition string.
|
// the schema definition string.
|
||||||
if ("<" == Info.Substring(0, 1))
|
if ("<" == Info.Substring(0, 1))
|
||||||
{
|
{
|
||||||
name = ParseEleName(Info);
|
name = ParseEleName(Info);
|
||||||
if (name != null)
|
if (name != null)
|
||||||
@@ -2425,7 +2426,7 @@ namespace RODBInterface
|
|||||||
return retlist;
|
return retlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string RODB_GetSchemaPiece(string Recid, string table)
|
public override string RODB_GetSchemaPiece(string Recid, string table)
|
||||||
{
|
{
|
||||||
string strGetSchemaPiece;
|
string strGetSchemaPiece;
|
||||||
string Info;
|
string Info;
|
||||||
@@ -3082,7 +3083,28 @@ namespace RODBInterface
|
|||||||
return GrpCnt;
|
return GrpCnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
//Get the Modification Date / Time for the RO
|
||||||
|
public override string RODB_GetModDateTime(string Recid, string table)
|
||||||
|
{
|
||||||
|
using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(strDatabaseConnectionCommand))
|
||||||
|
{
|
||||||
|
connection.Open();
|
||||||
|
using (System.Data.OleDb.OleDbCommand command = connection.CreateCommand())
|
||||||
|
{
|
||||||
|
//Unfortunately Access wont let you paramaterize the table name
|
||||||
|
command.CommandText = $"SELECT ModDateTime FROM {Regex.Replace(table, "[^a-zA-Z0-9]", "")} WHERE RecID = @Value";
|
||||||
|
command.Parameters.Add(new System.Data.OleDb.OleDbParameter
|
||||||
|
{
|
||||||
|
OleDbType = System.Data.OleDb.OleDbType.VarChar,
|
||||||
|
ParameterName = "@Value",
|
||||||
|
Value = Recid
|
||||||
|
});
|
||||||
|
return command.ExecuteScalar().ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1803,9 +1803,9 @@ namespace RODBInterface
|
|||||||
RecID = reader.GetString(0);
|
RecID = reader.GetString(0);
|
||||||
MyRecID = RecID;
|
MyRecID = RecID;
|
||||||
Info = reader.GetString(1);
|
Info = reader.GetString(1);
|
||||||
// it's defined in the local table if the first character is "<" which starts
|
// it's defined in the local table if the first character is "<" which starts
|
||||||
// the schema definition string.
|
// the schema definition string.
|
||||||
if ("<" == Info.Substring(0, 1))
|
if ("<" == Info.Substring(0, 1))
|
||||||
{
|
{
|
||||||
name = ParseEleName(Info);
|
name = ParseEleName(Info);
|
||||||
if (name != null)
|
if (name != null)
|
||||||
@@ -1859,9 +1859,9 @@ namespace RODBInterface
|
|||||||
RecID = reader.GetString(0);
|
RecID = reader.GetString(0);
|
||||||
MyRecID = RecID;
|
MyRecID = RecID;
|
||||||
Info = reader.GetString(1);
|
Info = reader.GetString(1);
|
||||||
// it's defined in the local table if the first character is "<" which starts
|
// it's defined in the local table if the first character is "<" which starts
|
||||||
// the schema definition string.
|
// the schema definition string.
|
||||||
if ("<" == Info.Substring(0, 1))
|
if ("<" == Info.Substring(0, 1))
|
||||||
{
|
{
|
||||||
name = ParseEleName(Info);
|
name = ParseEleName(Info);
|
||||||
if (name != null)
|
if (name != null)
|
||||||
@@ -2653,8 +2653,36 @@ namespace RODBInterface
|
|||||||
}
|
}
|
||||||
return GrpCnt;
|
return GrpCnt;
|
||||||
}
|
}
|
||||||
#endregion
|
|
||||||
public static bool TestConnect(string constring)
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
//Get the Modification Date / Time for the RO
|
||||||
|
public override string RODB_GetModDateTime(string Recid, string table)
|
||||||
|
{
|
||||||
|
using (SqlConnection connection = new SqlConnection(strDatabaseConnectionCommand))
|
||||||
|
{
|
||||||
|
connection.Open();
|
||||||
|
using (SqlCommand command = connection.CreateCommand())
|
||||||
|
{
|
||||||
|
command.CommandText = $"SELECT ModDateTime FROM ROALL WHERE RecID = @Value AND ROTable = @table";
|
||||||
|
command.Parameters.Add(new SqlParameter
|
||||||
|
{
|
||||||
|
SqlDbType = SqlDbType.VarChar,
|
||||||
|
ParameterName = "@Value",
|
||||||
|
Value = Recid
|
||||||
|
});
|
||||||
|
command.Parameters.Add(new SqlParameter
|
||||||
|
{
|
||||||
|
SqlDbType = SqlDbType.VarChar,
|
||||||
|
ParameterName = "@table",
|
||||||
|
Value = table
|
||||||
|
});
|
||||||
|
|
||||||
|
return command.ExecuteScalar().ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
public static bool TestConnect(string constring)
|
||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
using (SqlConnection connection = new SqlConnection(constring))
|
using (SqlConnection connection = new SqlConnection(constring))
|
||||||
|
|||||||
@@ -13540,35 +13540,7 @@ GO
|
|||||||
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteAllDocVersionPdfs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteAllDocVersionPdfs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
||||||
DROP PROCEDURE [deleteAllDocVersionPdfs];
|
DROP PROCEDURE [deleteAllDocVersionPdfs];
|
||||||
GO
|
GO
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
|
||||||
Copyright 2017 - Volian Enterprises, Inc. All rights reserved.
|
|
||||||
*****************************************************************************/
|
|
||||||
CREATE PROCEDURE [dbo].[deleteAllDocVersionPdfs]
|
|
||||||
|
|
||||||
(
|
|
||||||
@VersionID int
|
|
||||||
)
|
|
||||||
WITH EXECUTE AS OWNER
|
|
||||||
AS
|
|
||||||
BEGIN TRY -- Try Block
|
|
||||||
BEGIN TRANSACTION
|
|
||||||
DELETE [Pdfs]
|
|
||||||
WHERE [DocID] IN(select EE.DocID from vefn_GetVersionItems(cast(@VersionID as varchar(20))) VI
|
|
||||||
Join Entries EE ON EE.ContentID= VI.ContentID)
|
|
||||||
IF( @@TRANCOUNT > 0 ) COMMIT
|
|
||||||
END TRY
|
|
||||||
BEGIN CATCH -- Catch Block
|
|
||||||
IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level
|
|
||||||
ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback
|
|
||||||
EXEC vlnErrorHandler
|
|
||||||
END CATCH
|
|
||||||
GO
|
|
||||||
-- Display the status of Proc creation
|
|
||||||
IF (@@Error = 0) PRINT 'Procedure Creation: deleteAllDocVersionPdfs Succeeded'
|
|
||||||
ELSE PRINT 'Procedure Creation: deleteAllDocVersionPdfs Error on Creation'
|
|
||||||
GO
|
|
||||||
/****** Object: StoredProcedure [addFiguresByROFstIDandImageIDs] ******/
|
/****** Object: StoredProcedure [addFiguresByROFstIDandImageIDs] ******/
|
||||||
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[addFiguresByROFstIDandImageIDs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[addFiguresByROFstIDandImageIDs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
||||||
DROP PROCEDURE [addFiguresByROFstIDandImageIDs];
|
DROP PROCEDURE [addFiguresByROFstIDandImageIDs];
|
||||||
@@ -17169,6 +17141,7 @@ GO
|
|||||||
[roid] [varchar](50) NOT NULL,
|
[roid] [varchar](50) NOT NULL,
|
||||||
[appid] [varchar](max) NULL,
|
[appid] [varchar](max) NULL,
|
||||||
[value] [varchar](max) NULL,
|
[value] [varchar](max) NULL,
|
||||||
|
[moddatetime] [datetime] NULL,
|
||||||
CONSTRAINT [PK_RofstChild] PRIMARY KEY CLUSTERED
|
CONSTRAINT [PK_RofstChild] PRIMARY KEY CLUSTERED
|
||||||
(
|
(
|
||||||
[RofstChildID] ASC
|
[RofstChildID] ASC
|
||||||
@@ -17303,6 +17276,23 @@ GO
|
|||||||
End -- Rofst Tables
|
End -- Rofst Tables
|
||||||
Go
|
Go
|
||||||
|
|
||||||
|
-- =============================================
|
||||||
|
-- Author: Matthew Schill
|
||||||
|
-- Create date: 03/30/2026
|
||||||
|
-- Description: Store RO Modification date/time
|
||||||
|
-- =============================================
|
||||||
|
|
||||||
|
--- Add Column to store RO Modification date/time if it does not already exist
|
||||||
|
IF NOT EXISTS(SELECT *
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE TABLE_NAME = 'RofstChild'
|
||||||
|
AND COLUMN_NAME = 'moddatetime')
|
||||||
|
ALTER TABLE RofstChild ADD moddatetime datetime NULL;
|
||||||
|
go
|
||||||
|
-- Display the status
|
||||||
|
IF (@@Error = 0) PRINT 'Altered table [RofstChild] Succeeded for moddatetime'
|
||||||
|
ELSE PRINT 'Altered table [RofstChild] Error on Alter for moddatetime'
|
||||||
|
go
|
||||||
|
|
||||||
/*
|
/*
|
||||||
----------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------
|
||||||
@@ -19705,6 +19695,7 @@ GO
|
|||||||
@roid VarChar(50),
|
@roid VarChar(50),
|
||||||
@appid VarChar(Max) = null,
|
@appid VarChar(Max) = null,
|
||||||
@value VarChar(Max) = null,
|
@value VarChar(Max) = null,
|
||||||
|
@ModDateTime DateTime = null,
|
||||||
@missingDefaultValue VarChar(Max) = null
|
@missingDefaultValue VarChar(Max) = null
|
||||||
)
|
)
|
||||||
With Execute as Owner
|
With Execute as Owner
|
||||||
@@ -19722,8 +19713,8 @@ GO
|
|||||||
Set @missingDefaultValue = '[TBD]';
|
Set @missingDefaultValue = '[TBD]';
|
||||||
|
|
||||||
-- Create Rofst Child/Group Record --> [Roid = (12) Digits]
|
-- Create Rofst Child/Group Record --> [Roid = (12) Digits]
|
||||||
Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, [value])
|
Insert Into RofstChild (RofstID, ID, ParentID, dbiID, [type], title, roid, appid, moddatetime, [value])
|
||||||
Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, REPLACE(REPLACE(@value, '&123;', '{'), '&125;', '}'));
|
Values (@RofstID, @ID, @ParentID, @dbiID, @type, @title, @roid, @appid, @ModDateTime, REPLACE(REPLACE(@value, '&123;', '{'), '&125;', '}'));
|
||||||
|
|
||||||
|
|
||||||
-- Check for appid, if exists, then insert the default value for each return type if multi-value
|
-- Check for appid, if exists, then insert the default value for each return type if multi-value
|
||||||
@@ -24777,6 +24768,146 @@ IF (@@Error = 0) PRINT 'Procedure Creation: [GetMissingDocsByUnit] Succeeded'
|
|||||||
ELSE PRINT 'Procedure Creation: [GetMissingDocsByUnit] Error on Creation'
|
ELSE PRINT 'Procedure Creation: [GetMissingDocsByUnit] Error on Creation'
|
||||||
GO
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_ROFST_changes]') AND OBJECTPROPERTY(id,N'IsTableFunction') = 1)
|
||||||
|
DROP FUNCTION [vefn_ROFST_changes];
|
||||||
|
GO
|
||||||
|
|
||||||
|
SET ANSI_NULLS ON
|
||||||
|
GO
|
||||||
|
SET QUOTED_IDENTIFIER ON
|
||||||
|
GO
|
||||||
|
|
||||||
|
/*
|
||||||
|
==========================================================================================================
|
||||||
|
Author: Matthew Schill
|
||||||
|
Create Date: 03/31/2026
|
||||||
|
Description: Function for ROs that updated in latest RO FST Load
|
||||||
|
==========================================================================================================
|
||||||
|
*/
|
||||||
|
CREATE FUNCTION [dbo].[vefn_ROFST_changes](@OrigFSTID int, @NewFSTid int, @VersionID int)
|
||||||
|
RETURNS @ROIDs TABLE
|
||||||
|
(
|
||||||
|
[roid] varchar(50)
|
||||||
|
)
|
||||||
|
WITH EXECUTE AS OWNER
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
insert into @ROIDs
|
||||||
|
SELECT DISTINCT ISNULL(RofstChild.roid,previous.roid)
|
||||||
|
FROM
|
||||||
|
(SELECT * FROM RofstChild where RofstChild.RofstID = @NewFSTid) RofstChild
|
||||||
|
FULL OUTER JOIN
|
||||||
|
(SELECT * FROM RofstChild previous where previous.RofstID = @OrigFSTID) previous
|
||||||
|
ON previous.dbiID = RofstChild.dbiID AND previous.ID = RofstChild.ID
|
||||||
|
where
|
||||||
|
ISNULL(previous.RofstID,'') != ISNULL(RofstChild.RofstID,'')
|
||||||
|
AND
|
||||||
|
(
|
||||||
|
(RofstChild.RofstID = @NewFSTid OR RofstChild.RofstID IS NULL)
|
||||||
|
AND
|
||||||
|
(previous.RofstID = @OrigFSTID OR previous.RofstID IS NULL)
|
||||||
|
)
|
||||||
|
AND
|
||||||
|
(previous.moddatetime IS NULL
|
||||||
|
OR RofstChild.moddatetime IS NULL
|
||||||
|
OR RofstChild.moddatetime != previous.moddatetime
|
||||||
|
OR RofstChild.title != previous.title
|
||||||
|
OR RofstChild.value != previous.value
|
||||||
|
)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
go
|
||||||
|
|
||||||
|
IF (@@Error = 0) PRINT 'TableFunction [vefn_ROFST_changes] Succeeded'
|
||||||
|
ELSE PRINT 'TableFunction [vefn_ROFST_changes] Error on Creation'
|
||||||
|
go
|
||||||
|
|
||||||
|
/****** Object: StoredProcedure [deleteDocVersionPdfsWithNewROs] ******/
|
||||||
|
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[deleteDocVersionPdfsWithNewROs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
||||||
|
DROP PROCEDURE [deleteDocVersionPdfsWithNewROs];
|
||||||
|
GO
|
||||||
|
|
||||||
|
/*
|
||||||
|
==========================================================================================================
|
||||||
|
Author: Matthew Schill
|
||||||
|
Create Date: 03/31/2026
|
||||||
|
Description: Delete all PDFs with ROs that will need re-resolved
|
||||||
|
==========================================================================================================
|
||||||
|
*/
|
||||||
|
CREATE PROCEDURE [dbo].[deleteDocVersionPdfsWithNewROs]
|
||||||
|
|
||||||
|
(
|
||||||
|
@VersionID int,
|
||||||
|
@OrigFSTid int,
|
||||||
|
@NewFSTid int
|
||||||
|
)
|
||||||
|
WITH EXECUTE AS OWNER
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
DELETE [Pdfs]
|
||||||
|
WHERE [DocID] IN
|
||||||
|
(
|
||||||
|
select EE.DocID from vefn_GetVersionItems(cast(@VersionID as varchar(20))) VI
|
||||||
|
Join Entries EE ON EE.ContentID= VI.ContentID
|
||||||
|
Join DRoUsages ON DRoUsages.DocID = EE.DocID
|
||||||
|
Join dbo.vefn_ROFST_changes(@OrigFSTID, @NewFSTid, @VersionID) ROFST_changes on LEFT(DRoUsages.ROID,12) = ROFST_changes.roid
|
||||||
|
)
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- Display the status of Proc creation
|
||||||
|
IF (@@Error = 0) PRINT 'Procedure Creation: deleteDocVersionPdfsWithNewROs Succeeded'
|
||||||
|
ELSE PRINT 'Procedure Creation: deleteDocVersionPdfsWithNewROs Error on Creation'
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
/****** Object: StoredProcedure [getItemsWithNewROs] ******/
|
||||||
|
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getItemsWithNewROs]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
||||||
|
DROP PROCEDURE [getItemsWithNewROs];
|
||||||
|
GO
|
||||||
|
|
||||||
|
/*
|
||||||
|
==========================================================================================================
|
||||||
|
Author: Matthew Schill
|
||||||
|
Create Date: 03/31/2026
|
||||||
|
Description: Get Items with New ROs that will need resolved
|
||||||
|
==========================================================================================================
|
||||||
|
*/
|
||||||
|
CREATE PROCEDURE [dbo].[getItemsWithNewROs]
|
||||||
|
|
||||||
|
(
|
||||||
|
@VersionID int,
|
||||||
|
@OrigFSTid int,
|
||||||
|
@NewFSTid int
|
||||||
|
)
|
||||||
|
WITH EXECUTE AS OWNER
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
select DISTINCT tblItems.ItemID FROM
|
||||||
|
dbo.vefn_ROFST_changes(@OrigFSTID, @NewFSTid, @VersionID) ROFST_changes
|
||||||
|
INNER JOIN RoUsages ON LEFT(RoUsages.ROID,12) = ROFST_changes.roid
|
||||||
|
INNER JOIN tblItems ON RoUsages.ContentID = tblItems.ContentID
|
||||||
|
OUTER APPLY (Select VersionID = dbo.vefn_GetVersionIDByItemID(tblItems.ItemID)) ver
|
||||||
|
INNER JOIN DocVersions DV ON DV.VersionID = ver.VersionID
|
||||||
|
INNER JOIN Associations ON Associations.VersionID = DV.VersionID
|
||||||
|
where ver.VersionID = @VersionID
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
END
|
||||||
|
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- Display the status of Proc creation
|
||||||
|
IF (@@Error = 0) PRINT 'Procedure Creation: getItemsWithNewROs Succeeded'
|
||||||
|
ELSE PRINT 'Procedure Creation: getItemsWithNewROs Error on Creation'
|
||||||
|
GO
|
||||||
|
|
||||||
/*
|
/*
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
| ADD New Code Before this Block |
|
| ADD New Code Before this Block |
|
||||||
@@ -24810,8 +24941,8 @@ BEGIN TRY -- Try Block
|
|||||||
DECLARE @RevDate varchar(255)
|
DECLARE @RevDate varchar(255)
|
||||||
DECLARE @RevDescription varchar(255)
|
DECLARE @RevDescription varchar(255)
|
||||||
|
|
||||||
set @RevDate = '03/13/2026 7:00 AM'
|
set @RevDate = '04/21/2026 7:00 AM'
|
||||||
set @RevDescription = 'Added Get Missing Docs by Unit for Generating Pdf table'
|
set @RevDescription = 'Store RO Modification date/time'
|
||||||
|
|
||||||
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
|
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
|
||||||
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
|
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
|
||||||
|
|||||||
@@ -1036,8 +1036,11 @@ namespace VEPROMS
|
|||||||
ROFstInfo roFstInfo = dq.DocVersionAssociations[0].MyROFst;
|
ROFstInfo roFstInfo = dq.DocVersionAssociations[0].MyROFst;
|
||||||
string rofstPath = roFstInfo.MyRODb.FolderPath + @"\ro.fst";
|
string rofstPath = roFstInfo.MyRODb.FolderPath + @"\ro.fst";
|
||||||
|
|
||||||
//if (!pathExists(rofstPath))
|
//must get id before ROFST gets updated so know what to refresh later
|
||||||
if (!File.Exists(rofstPath))
|
int origfstid = roFstInfo.ROFstID;
|
||||||
|
|
||||||
|
//if (!pathExists(rofstPath))
|
||||||
|
if (!File.Exists(rofstPath))
|
||||||
{
|
{
|
||||||
ProgressBar.ColorTable = eProgressBarItemColor.Error;
|
ProgressBar.ColorTable = eProgressBarItemColor.Error;
|
||||||
FinalProgressBarMessage = "No existing RO.FST";
|
FinalProgressBarMessage = "No existing RO.FST";
|
||||||
@@ -1064,8 +1067,8 @@ namespace VEPROMS
|
|||||||
roFstInfo = dq.DocVersionAssociations[0].MyROFst;
|
roFstInfo = dq.DocVersionAssociations[0].MyROFst;
|
||||||
}
|
}
|
||||||
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
||||||
ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, txtProcess);
|
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, txtProcess, roFstInfo, origfstid, roFstInfo.ROFstID);
|
||||||
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
Cursor = Cursors.Default;
|
Cursor = Cursors.Default;
|
||||||
|
|||||||
+1
-12
@@ -83,7 +83,6 @@ namespace VEPROMS
|
|||||||
this.lblUser = new DevComponents.DotNetBar.LabelItem();
|
this.lblUser = new DevComponents.DotNetBar.LabelItem();
|
||||||
this.lblLastChange = new DevComponents.DotNetBar.LabelItem();
|
this.lblLastChange = new DevComponents.DotNetBar.LabelItem();
|
||||||
this.btnStepRTF = new DevComponents.DotNetBar.ButtonItem();
|
this.btnStepRTF = new DevComponents.DotNetBar.ButtonItem();
|
||||||
this.btnFixMSWord = new DevComponents.DotNetBar.ButtonItem();
|
|
||||||
this.epAnnotations = new DevComponents.DotNetBar.ExpandablePanel();
|
this.epAnnotations = new DevComponents.DotNetBar.ExpandablePanel();
|
||||||
this.ctrlAnnotationDetails = new Volian.Controls.Library.AnnotationDetails();
|
this.ctrlAnnotationDetails = new Volian.Controls.Library.AnnotationDetails();
|
||||||
this.btnAnnoDetailsPushPin = new DevComponents.DotNetBar.ButtonX();
|
this.btnAnnoDetailsPushPin = new DevComponents.DotNetBar.ButtonX();
|
||||||
@@ -541,8 +540,7 @@ namespace VEPROMS
|
|||||||
this.btnEditItem,
|
this.btnEditItem,
|
||||||
this.lblUser,
|
this.lblUser,
|
||||||
this.lblLastChange,
|
this.lblLastChange,
|
||||||
this.btnStepRTF,
|
this.btnStepRTF});
|
||||||
this.btnFixMSWord});
|
|
||||||
this.bottomBar.Location = new System.Drawing.Point(5, 573);
|
this.bottomBar.Location = new System.Drawing.Point(5, 573);
|
||||||
this.bottomBar.Name = "bottomBar";
|
this.bottomBar.Name = "bottomBar";
|
||||||
this.bottomBar.Size = new System.Drawing.Size(1185, 25);
|
this.bottomBar.Size = new System.Drawing.Size(1185, 25);
|
||||||
@@ -728,14 +726,6 @@ namespace VEPROMS
|
|||||||
this.btnStepRTF.Text = "Step RTF";
|
this.btnStepRTF.Text = "Step RTF";
|
||||||
this.btnStepRTF.Click += new System.EventHandler(this.btnStepRTF_Click);
|
this.btnStepRTF.Click += new System.EventHandler(this.btnStepRTF_Click);
|
||||||
//
|
//
|
||||||
// btnFixMSWord
|
|
||||||
//
|
|
||||||
this.btnFixMSWord.ForeColor = System.Drawing.Color.Black;
|
|
||||||
this.btnFixMSWord.Name = "btnFixMSWord";
|
|
||||||
this.btnFixMSWord.Text = "Fix Symbol Fonts";
|
|
||||||
this.btnFixMSWord.Visible = false;
|
|
||||||
this.btnFixMSWord.Click += new System.EventHandler(this.btnFixMSWord_Click);
|
|
||||||
//
|
|
||||||
// epAnnotations
|
// epAnnotations
|
||||||
//
|
//
|
||||||
this.epAnnotations.CanvasColor = System.Drawing.SystemColors.Control;
|
this.epAnnotations.CanvasColor = System.Drawing.SystemColors.Control;
|
||||||
@@ -1775,7 +1765,6 @@ namespace VEPROMS
|
|||||||
private DevComponents.DotNetBar.ButtonItem btnItemInfo;
|
private DevComponents.DotNetBar.ButtonItem btnItemInfo;
|
||||||
private DevComponents.DotNetBar.ButtonItem btnFilter;
|
private DevComponents.DotNetBar.ButtonItem btnFilter;
|
||||||
private DevComponents.DotNetBar.TextBoxItem txtFilter;
|
private DevComponents.DotNetBar.TextBoxItem txtFilter;
|
||||||
private DevComponents.DotNetBar.ButtonItem btnFixMSWord;
|
|
||||||
private Volian.Controls.Library.DisplayBookMarks displayBookMarks;
|
private Volian.Controls.Library.DisplayBookMarks displayBookMarks;
|
||||||
//private DevComponents.DotNetBar.LabelItem lblLocked;
|
//private DevComponents.DotNetBar.LabelItem lblLocked;
|
||||||
private DevComponents.DotNetBar.ButtonItem btnShortCuts;
|
private DevComponents.DotNetBar.ButtonItem btnShortCuts;
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ namespace VEPROMS
|
|||||||
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
|
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
|
||||||
displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer
|
displayRO.TabControl = tc; // B2019-043 this was being passed in as a parameter for DisplayRO which caused issues with the Visual Studio designer
|
||||||
|
|
||||||
SetupFolder(MyDocVersion.FolderID);
|
SetupFolder(MyDocVersion.FolderID);
|
||||||
tc.MySessionInfo = MyParent.MySessionInfo;
|
tc.MySessionInfo = MyParent.MySessionInfo;
|
||||||
displaySearch1.TopFolderID = myDocVersion.FolderID;
|
displaySearch1.TopFolderID = myDocVersion.FolderID;
|
||||||
SelectedDVI = myDocVersion;
|
SelectedDVI = myDocVersion;
|
||||||
@@ -1578,13 +1578,13 @@ namespace VEPROMS
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SelectedROFst = myDTP.MyDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
SelectedROFst = myDTP.MyDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (tc.MyEditItem != null && displayRO.MyROFST != null && tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].ROFstID != displayRO.MyROFST.ROFstID)
|
else if (tc.MyEditItem != null && displayRO.MyROFST != null && tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].ROFstID != displayRO.MyROFST.ROFstID)
|
||||||
{
|
{
|
||||||
SelectedROFst = tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
SelectedROFst = tc.MyEditItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
||||||
}
|
}
|
||||||
|
|
||||||
// need this to update RO Tree after UpdateRofst (B2015-226)
|
// need this to update RO Tree after UpdateRofst (B2015-226)
|
||||||
@@ -1592,9 +1592,9 @@ namespace VEPROMS
|
|||||||
if (displayRO.MyROFST != SelectedROFst)
|
if (displayRO.MyROFST != SelectedROFst)
|
||||||
{
|
{
|
||||||
displayRO.MyROFST = SelectedROFst;
|
displayRO.MyROFST = SelectedROFst;
|
||||||
// B2023-021: force Load of Step Prop/RO panel RO tree by passing in
|
// B2023-021: force Load of Step Prop/RO panel RO tree by passing in
|
||||||
// true to LoadTree
|
// true to LoadTree
|
||||||
displayRO.LoadTree(true);
|
if (!_WeAreExitingPROMS) displayRO.LoadTree(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2395,9 +2395,10 @@ namespace VEPROMS
|
|||||||
tv.MySessionInfo = MySessionInfo;
|
tv.MySessionInfo = MySessionInfo;
|
||||||
tv.MyUserInfo = MyUserInfo;
|
tv.MyUserInfo = MyUserInfo;
|
||||||
StepTabRibbon.MySessionInfo = MySessionInfo;
|
StepTabRibbon.MySessionInfo = MySessionInfo;
|
||||||
|
displayRO.MySessionInfo = MySessionInfo;
|
||||||
|
|
||||||
// Initialize Caption with Server name and Database name.
|
// Initialize Caption with Server name and Database name.
|
||||||
SetCaption(tv.TopNode as VETreeNode);
|
SetCaption(tv.TopNode as VETreeNode);
|
||||||
System.Threading.AutoResetEvent autoEvent = new System.Threading.AutoResetEvent(false);
|
System.Threading.AutoResetEvent autoEvent = new System.Threading.AutoResetEvent(false);
|
||||||
|
|
||||||
//System.Threading.TimerCallback timerDelegate = new System.Threading.TimerCallback(MySessionInfo.PingSession);
|
//System.Threading.TimerCallback timerDelegate = new System.Threading.TimerCallback(MySessionInfo.PingSession);
|
||||||
@@ -4552,8 +4553,17 @@ namespace VEPROMS
|
|||||||
|
|
||||||
SetCaption(tv.SelectedNode as VETreeNode);
|
SetCaption(tv.SelectedNode as VETreeNode);
|
||||||
displayApplicability.MyDisplayTabItem = tc.SelectedDisplayTabItem;
|
displayApplicability.MyDisplayTabItem = tc.SelectedDisplayTabItem;
|
||||||
|
|
||||||
if (tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0)
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
// DisplayTab was changed
|
||||||
|
// need to clear the RTB selected
|
||||||
|
// without resetting the DVI or FST
|
||||||
|
// (those will be set manually / individually)
|
||||||
|
// this will prevent DVI and FST from changing to null then back again
|
||||||
|
// which will trigger reloads
|
||||||
|
displayRO.ClearRTB();
|
||||||
|
|
||||||
|
if (tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0)
|
||||||
{
|
{
|
||||||
displayRO.MyROFST = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
displayRO.MyROFST = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst;
|
||||||
}
|
}
|
||||||
@@ -4562,9 +4572,24 @@ namespace VEPROMS
|
|||||||
displayRO.MyROFST = null;
|
displayRO.MyROFST = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// B2022-026 RO Memory reduction coding (Jakes Merge)
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
// B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures. (Added True for the forceLoad parameter)
|
// set the DocVersionInfo so that the FST and docversion are in sync
|
||||||
displayRO.LoadTree(true);
|
SelectedDVI = tc.SelectedDisplayTabItem.MyItemInfo.MyDocVersion;
|
||||||
|
if (displayRO.MyDvi != SelectedDVI)
|
||||||
|
{
|
||||||
|
displayRO.MyDvi = SelectedDVI;
|
||||||
|
}
|
||||||
|
Application.DoEvents();
|
||||||
|
|
||||||
|
// B2022-026 RO Memory reduction coding (Jakes Merge)
|
||||||
|
// B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures. (Added True for the forceLoad parameter)
|
||||||
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
// if ROFST got updated,
|
||||||
|
// set the Selected FST so it is in sync
|
||||||
|
if (!_WeAreExitingPROMS && displayRO.LoadTree(true))
|
||||||
|
{
|
||||||
|
SelectedROFst = displayRO.MyROFST;
|
||||||
|
}
|
||||||
|
|
||||||
lblUser.Text = tc.SelectedDisplayTabItem.MyUserRole;
|
lblUser.Text = tc.SelectedDisplayTabItem.MyUserRole;
|
||||||
|
|
||||||
@@ -4628,8 +4653,6 @@ namespace VEPROMS
|
|||||||
if (args != null && args.MyEditItem != null && !args.MyEditItem.MyStepPanel.ContainsFocus)
|
if (args != null && args.MyEditItem != null && !args.MyEditItem.MyStepPanel.ContainsFocus)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
btnFixMSWord.Visible = (args != null && (args.MyItemInfo != null && args.MyEditItem == null));
|
|
||||||
|
|
||||||
if (_LastStepRTB != null && !_LastStepRTB.Disposing && !_LastStepRTB.Closed)
|
if (_LastStepRTB != null && !_LastStepRTB.Disposing && !_LastStepRTB.Closed)
|
||||||
_LastStepRTB.EditModeChanged -= new StepRTBEvent(_LastStepRTB_EditModeChanged);
|
_LastStepRTB.EditModeChanged -= new StepRTBEvent(_LastStepRTB_EditModeChanged);
|
||||||
|
|
||||||
@@ -4767,9 +4790,15 @@ namespace VEPROMS
|
|||||||
// B2022-026 RO Memory reduction coding (Jakes Merge)
|
// B2022-026 RO Memory reduction coding (Jakes Merge)
|
||||||
displayRO.ProgressBar = bottomProgBar;
|
displayRO.ProgressBar = bottomProgBar;
|
||||||
displayRO.MyRTB = args.MyEditItem.MyStepRTB;
|
displayRO.MyRTB = args.MyEditItem.MyStepRTB;
|
||||||
displayRO.LoadTree();
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
// if ROFST got updated,
|
||||||
|
// set the Selected FST so it is in sync
|
||||||
|
if (!_WeAreExitingPROMS && displayRO.LoadTree())
|
||||||
|
{
|
||||||
|
SelectedROFst = displayRO.MyROFST;
|
||||||
|
}
|
||||||
|
|
||||||
displayBookMarks.MyEditItem = args.MyEditItem;
|
displayBookMarks.MyEditItem = args.MyEditItem;
|
||||||
displayHistory.MyEditItem = args.MyEditItem;
|
displayHistory.MyEditItem = args.MyEditItem;
|
||||||
|
|
||||||
lblEditView.Text = args.MyEditItem.MyStepPanel.VwMode == E_ViewMode.Edit ? "Edit" : "View";
|
lblEditView.Text = args.MyEditItem.MyStepPanel.VwMode == E_ViewMode.Edit ? "Edit" : "View";
|
||||||
@@ -4797,7 +4826,7 @@ namespace VEPROMS
|
|||||||
|
|
||||||
// B2022-026 RO Memory reduction coding (Jakes Merge)
|
// B2022-026 RO Memory reduction coding (Jakes Merge)
|
||||||
displayRO.SetFindDocROButton(false);
|
displayRO.SetFindDocROButton(false);
|
||||||
displayRO.LoadTree();
|
if (!_WeAreExitingPROMS) displayRO.LoadTree();
|
||||||
|
|
||||||
//C2019-036 View Only mode work with Checked Out Procedures
|
//C2019-036 View Only mode work with Checked Out Procedures
|
||||||
//In View Only Mode - Step Properties should be disabled
|
//In View Only Mode - Step Properties should be disabled
|
||||||
@@ -4930,9 +4959,15 @@ namespace VEPROMS
|
|||||||
displayRO.MyRTB = SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyStepRTB;
|
displayRO.MyRTB = SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyStepRTB;
|
||||||
displayRO.CurROLink = args.MyLinkText.MyRoUsageInfo;
|
displayRO.CurROLink = args.MyLinkText.MyRoUsageInfo;
|
||||||
|
|
||||||
// B2022-026 RO Memory reduction coding (Jakes Merge)
|
// B2022-026 RO Memory reduction coding (Jakes Merge)
|
||||||
displayRO.LoadTree();
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
}
|
// if ROFST got updated,
|
||||||
|
// set the Selected FST so it is in sync
|
||||||
|
if (displayRO.LoadTree())
|
||||||
|
{
|
||||||
|
SelectedROFst = displayRO.MyROFST;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -5241,19 +5276,6 @@ namespace VEPROMS
|
|||||||
Clipboard.SetDataObject(mydo);
|
Clipboard.SetDataObject(mydo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void btnFixMSWord_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (tc.SelectedDisplayTabItem != null && tc.SelectedDisplayTabItem.MyDSOTabPanel != null)
|
|
||||||
{
|
|
||||||
string btnText = btnFixMSWord.Text;
|
|
||||||
btnFixMSWord.FixedSize = btnFixMSWord.Size;
|
|
||||||
btnFixMSWord.Text = "Processing ...";
|
|
||||||
this.Cursor = Cursors.WaitCursor;
|
|
||||||
tc.SelectedDisplayTabItem.MyDSOTabPanel.FixSymbolCharacters();
|
|
||||||
btnFixMSWord.Text = btnText;
|
|
||||||
this.Cursor = Cursors.Default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void epAnnotations_Resize(object sender, EventArgs e)
|
private void epAnnotations_Resize(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1527,8 +1527,11 @@ namespace VEPROMS
|
|||||||
|
|
||||||
Cursor = Cursors.WaitCursor;
|
Cursor = Cursors.WaitCursor;
|
||||||
|
|
||||||
// RO changes placed in file in the Documents\VEPROMS folder
|
//must get id before ROFST gets updated so know what to refresh later
|
||||||
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(_DocVersionConfig.MyDocVersion.MyDocVersionInfo));
|
int origfstid = SelectedROFst.ROFstID;
|
||||||
|
|
||||||
|
// RO changes placed in file in the Documents\VEPROMS folder
|
||||||
|
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(_DocVersionConfig.MyDocVersion.MyDocVersionInfo));
|
||||||
DocVersion dv = _DocVersionConfig.MyDocVersion;
|
DocVersion dv = _DocVersionConfig.MyDocVersion;
|
||||||
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
|
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
|
||||||
if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed
|
if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed
|
||||||
@@ -1540,9 +1543,9 @@ namespace VEPROMS
|
|||||||
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
|
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
|
||||||
SelectedROFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
SelectedROFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
||||||
|
|
||||||
ROFst newrofst = ROFstInfo.RefreshROFst(_DocVersionConfig.MyDocVersion, SelectedROFst, DoProgressBarRefresh, null);
|
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, null, SelectedROFst, origfstid, SelectedROFst.ROFstID);
|
||||||
|
|
||||||
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
|
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
|
||||||
SelectedROFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
SelectedROFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
||||||
|
|
||||||
swROUpdate.Close();
|
swROUpdate.Close();
|
||||||
|
|||||||
@@ -97,7 +97,8 @@ namespace VEPROMS.CSLA.Library
|
|||||||
public string appid;
|
public string appid;
|
||||||
public int ID;
|
public int ID;
|
||||||
public int ParentID;
|
public int ParentID;
|
||||||
public rochild[] children;
|
public DateTime? ModDateTime; //C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
public rochild[] children;
|
||||||
};
|
};
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
@@ -110,7 +111,8 @@ namespace VEPROMS.CSLA.Library
|
|||||||
public string roid; // roid unique identifier
|
public string roid; // roid unique identifier
|
||||||
public string appid; // accessory page id - user specified unique id
|
public string appid; // accessory page id - user specified unique id
|
||||||
public string value; // return value, can be multiple values
|
public string value; // return value, can be multiple values
|
||||||
public rochild[] children;
|
public DateTime? ModDateTime; //C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
public rochild[] children;
|
||||||
};
|
};
|
||||||
|
|
||||||
public class RoExtension
|
public class RoExtension
|
||||||
@@ -686,15 +688,19 @@ namespace VEPROMS.CSLA.Library
|
|||||||
//return string.Format("{0,10:#####0.00}", TimeSpan.FromTicks(DateTime.Now.Ticks - dtStart.Ticks).TotalSeconds);
|
//return string.Format("{0,10:#####0.00}", TimeSpan.FromTicks(DateTime.Now.Ticks - dtStart.Ticks).TotalSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
//return new ROFstID if there is a newer ID that matches the same ROFSTDB
|
||||||
|
public int GetNewerFSTID() => RofstGetLatestID(RofstID);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Private Methods
|
#endregion
|
||||||
|
|
||||||
#region (Database Calls)
|
#region Private Methods
|
||||||
|
|
||||||
private bool RofstDataExists(int rofstID)
|
#region (Database Calls)
|
||||||
|
|
||||||
|
private bool RofstDataExists(int rofstID)
|
||||||
{
|
{
|
||||||
int headerStatusID = RofstDataGetHeaderLoadStatus(rofstID);
|
int headerStatusID = RofstDataGetHeaderLoadStatus(rofstID);
|
||||||
|
|
||||||
@@ -888,7 +894,7 @@ namespace VEPROMS.CSLA.Library
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RofstChildInsert(int rofstID, int id, int parentID, int dbiID, int type, string title, string roid, string appid, string value)
|
private void RofstChildInsert(int rofstID, int id, int parentID, int dbiID, int type, string title, string roid, string appid, string value, DateTime? dt = null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -917,7 +923,10 @@ namespace VEPROMS.CSLA.Library
|
|||||||
if (!string.IsNullOrEmpty(this.RoMissingDefaultValue))
|
if (!string.IsNullOrEmpty(this.RoMissingDefaultValue))
|
||||||
cmd.Parameters.Add(new SqlParameter("@missingDefaultValue", SqlDbType.VarChar)).Value = this.RoMissingDefaultValue;
|
cmd.Parameters.Add(new SqlParameter("@missingDefaultValue", SqlDbType.VarChar)).Value = this.RoMissingDefaultValue;
|
||||||
|
|
||||||
cmd.ExecuteNonQuery();
|
if (dt != null)
|
||||||
|
cmd.Parameters.Add(new SqlParameter("@ModDateTime", SqlDbType.DateTime)).Value = dt;
|
||||||
|
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1299,11 +1308,37 @@ namespace VEPROMS.CSLA.Library
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
//return new ROFstID if there is a newer ID that matches the same ROFSTDB
|
||||||
|
private int RofstGetLatestID(int rofstID)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
||||||
|
{
|
||||||
|
using (SqlCommand cmd = cn.CreateCommand())
|
||||||
|
{
|
||||||
|
cmd.CommandTimeout = 0;
|
||||||
|
cmd.CommandType = CommandType.Text;
|
||||||
|
cmd.CommandText = "SELECT ISNULL((SELECT TOP 1 ROFsts.ROFstID FROM ROFsts INNER JOIN ROFsts curFST ON curFST.RODbID = ROFsts.RODbID WHERE curFST.ROFstID = @FSTid order by ROFsts.DTS desc),-1)";
|
||||||
|
|
||||||
#region (Core/Base logic for RO Values & UnitInfo RO Values)
|
cmd.Parameters.Add(new SqlParameter("@FSTid", SqlDbType.Int)).Value = rofstID;
|
||||||
|
|
||||||
private ROFSTLookup.rochild RofstDataGetChildByRoid(int rofstID, string roid, bool loadChildren = false, bool loadAllChildren = false)
|
return (int) cmd.ExecuteScalar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new DbCslaException("RofstData.RofstGetLatestID", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region (Core/Base logic for RO Values & UnitInfo RO Values)
|
||||||
|
|
||||||
|
private ROFSTLookup.rochild RofstDataGetChildByRoid(int rofstID, string roid, bool loadChildren = false, bool loadAllChildren = false)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1512,10 +1547,10 @@ namespace VEPROMS.CSLA.Library
|
|||||||
|
|
||||||
int slen = StringLength(ab, myOffset + 6);
|
int slen = StringLength(ab, myOffset + 6);
|
||||||
tmp.title = Encoding.Default.GetString(ab, myOffset + 6, slen);
|
tmp.title = Encoding.Default.GetString(ab, myOffset + 6, slen);
|
||||||
|
|
||||||
myOffset += (7 + slen);
|
myOffset += (7 + slen);
|
||||||
|
|
||||||
ROFSTLookup.rogrp tmpg = LoadGroup(ab, childOffset, tableID);
|
ROFSTLookup.rogrp tmpg = LoadGroup(ab, childOffset, tableID);
|
||||||
|
|
||||||
tmp.ID = tmpg.ID;
|
tmp.ID = tmpg.ID;
|
||||||
tmp.ParentID = tmpg.ParentID;
|
tmp.ParentID = tmpg.ParentID;
|
||||||
@@ -1523,8 +1558,12 @@ namespace VEPROMS.CSLA.Library
|
|||||||
tmp.appid = tmpg.appid;
|
tmp.appid = tmpg.appid;
|
||||||
tmp.roid = tableID.ToString("X4") + tmp.ID.ToString("X8");
|
tmp.roid = tableID.ToString("X4") + tmp.ID.ToString("X8");
|
||||||
tmp.children = tmpg.children;
|
tmp.children = tmpg.children;
|
||||||
|
if (tmpg.ModDateTime != null)
|
||||||
|
{
|
||||||
|
tmp.ModDateTime = tmpg.ModDateTime;
|
||||||
|
}
|
||||||
|
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
for (j = i - 1; j >= 0 && tmp.ID < myGrp.children[j].ID; j--)
|
for (j = i - 1; j >= 0 && tmp.ID < myGrp.children[j].ID; j--)
|
||||||
{
|
{
|
||||||
@@ -1542,7 +1581,13 @@ namespace VEPROMS.CSLA.Library
|
|||||||
int slen2 = StringLength(ab, offset + 13 + slen);
|
int slen2 = StringLength(ab, offset + 13 + slen);
|
||||||
myGrp.appid = Encoding.Default.GetString(ab, offset + 13 + slen, slen2);
|
myGrp.appid = Encoding.Default.GetString(ab, offset + 13 + slen, slen2);
|
||||||
|
|
||||||
_dbRoCnt++;
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
if (myGrp.value != "" && DateTime.TryParseExact(Encoding.Default.GetString(ab, offset + 14 + slen + slen2, 14), "yyyyMMddHHmmss", null, System.Globalization.DateTimeStyles.None, out DateTime dt))
|
||||||
|
{
|
||||||
|
myGrp.ModDateTime = dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
_dbRoCnt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return myGrp;
|
return myGrp;
|
||||||
@@ -1655,7 +1700,7 @@ namespace VEPROMS.CSLA.Library
|
|||||||
private void LoadChild(int rofstID, int dbiID, ROFSTLookup.rochild child)
|
private void LoadChild(int rofstID, int dbiID, ROFSTLookup.rochild child)
|
||||||
{
|
{
|
||||||
//Insert Rofst Child
|
//Insert Rofst Child
|
||||||
RofstChildInsert(rofstID, child.ID, child.ParentID, dbiID, child.type, child.title, child.roid, child.appid, child.value);
|
RofstChildInsert(rofstID, child.ID, child.ParentID, dbiID, child.type, child.title, child.roid, child.appid, child.value, child.ModDateTime);
|
||||||
|
|
||||||
//Increment RO Count if RoChild has a return value
|
//Increment RO Count if RoChild has a return value
|
||||||
if (!string.IsNullOrEmpty(child.value)) _curRoCnt++;
|
if (!string.IsNullOrEmpty(child.value)) _curRoCnt++;
|
||||||
|
|||||||
@@ -1093,8 +1093,17 @@ namespace VEPROMS.CSLA.Library
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// B2022-026 RO Memory Reduction code - pass in ROFstInfo
|
|
||||||
internal static void MyRefreshReferenceObjects(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, DocVersionInfo docVersionInfo, ROFstInfo origROFst)
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
//Refresh at item level
|
||||||
|
public static void RefreshReferenceObjects(ItemInfo tmp, ROFstInfo origROFst)
|
||||||
|
{
|
||||||
|
if (tmp.MyDocVersion.DocVersionConfig.SelectedSlave <= 0)
|
||||||
|
MyRefreshReferenceObjects(tmp, null, tmp.GetSectionInfo(), tmp.MyDocVersion, origROFst);
|
||||||
|
}
|
||||||
|
|
||||||
|
// B2022-026 RO Memory Reduction code - pass in ROFstInfo
|
||||||
|
internal static void MyRefreshReferenceObjects(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, DocVersionInfo docVersionInfo, ROFstInfo origROFst)
|
||||||
{
|
{
|
||||||
if (itemInfo.MyContent.ContentPartCount > 0)
|
if (itemInfo.MyContent.ContentPartCount > 0)
|
||||||
{
|
{
|
||||||
@@ -1219,31 +1228,47 @@ namespace VEPROMS.CSLA.Library
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Debug Code
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
public static List<ItemInfo> GetItemInfoWithChangedROs(int docversionid, int origfstid, int newfstid)
|
||||||
|
{
|
||||||
|
List<ItemInfo> lst = new List<ItemInfo>();
|
||||||
|
|
||||||
//private static void ShowDifference(string oldText, string newText)
|
foreach (DataRow r in Data_GetItemsWithChangedROs(docversionid, origfstid, newfstid).Rows)
|
||||||
//{
|
{
|
||||||
// string nt = newText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
|
using (ItemInfo itm = Get((int)r["ItemID"]))
|
||||||
// string ot = oldText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
|
{
|
||||||
// ShowText("OldText", ot);
|
lst.Add(itm);
|
||||||
// ShowText("NewText", nt);
|
}
|
||||||
//}
|
}
|
||||||
//private static void ShowText(string title, string newText)
|
|
||||||
//{
|
|
||||||
// StringBuilder sb = new StringBuilder();
|
|
||||||
// foreach (char c in newText)
|
|
||||||
// {
|
|
||||||
// if(c<' ' || c> '\x7F')
|
|
||||||
// sb.Append(string.Format("\\x{0:X2}",((int) c)));
|
|
||||||
// else
|
|
||||||
// sb.Append(c);
|
|
||||||
// }
|
|
||||||
// Console.WriteLine("{0}='{1}'",title,sb.ToString());
|
|
||||||
//}
|
|
||||||
|
|
||||||
#endregion // debug
|
return lst;
|
||||||
|
}
|
||||||
|
|
||||||
internal static void SetParentSectionAndDocVersionPageNum(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, ProcedureInfo procInfo, DocVersionInfo docVersionInfo, TransitionLookup tranLookup)
|
#region Debug Code
|
||||||
|
|
||||||
|
//private static void ShowDifference(string oldText, string newText)
|
||||||
|
//{
|
||||||
|
// string nt = newText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
|
||||||
|
// string ot = oldText.Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
|
||||||
|
// ShowText("OldText", ot);
|
||||||
|
// ShowText("NewText", nt);
|
||||||
|
//}
|
||||||
|
//private static void ShowText(string title, string newText)
|
||||||
|
//{
|
||||||
|
// StringBuilder sb = new StringBuilder();
|
||||||
|
// foreach (char c in newText)
|
||||||
|
// {
|
||||||
|
// if(c<' ' || c> '\x7F')
|
||||||
|
// sb.Append(string.Format("\\x{0:X2}",((int) c)));
|
||||||
|
// else
|
||||||
|
// sb.Append(c);
|
||||||
|
// }
|
||||||
|
// Console.WriteLine("{0}='{1}'",title,sb.ToString());
|
||||||
|
//}
|
||||||
|
|
||||||
|
#endregion // debug
|
||||||
|
|
||||||
|
internal static void SetParentSectionAndDocVersionPageNum(ItemInfo itemInfo, IVEDrillDownReadOnly itemParent, SectionInfo sectionInfo, ProcedureInfo procInfo, DocVersionInfo docVersionInfo, TransitionLookup tranLookup)
|
||||||
{
|
{
|
||||||
if (itemInfo.MyContent.ContentPartCount > 0)
|
if (itemInfo.MyContent.ContentPartCount > 0)
|
||||||
{
|
{
|
||||||
@@ -1890,10 +1915,44 @@ namespace VEPROMS.CSLA.Library
|
|||||||
foreach (ItemInfo itemInfo in partInfo.MyItems)
|
foreach (ItemInfo itemInfo in partInfo.MyItems)
|
||||||
itemInfo.SpinThroughChildren();
|
itemInfo.SpinThroughChildren();
|
||||||
}
|
}
|
||||||
#endregion
|
|
||||||
#region LoadAtOnce
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
// Method to Get Item and children
|
private static DataTable Data_GetItemsWithChangedROs(int docversionid, int origfstid, int newfstid)
|
||||||
public static ItemInfo GetItemAndChildren(int? itemID, int? parentID)
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
||||||
|
{
|
||||||
|
using (SqlCommand cm = cn.CreateCommand())
|
||||||
|
{
|
||||||
|
cm.CommandType = CommandType.StoredProcedure;
|
||||||
|
cm.CommandText = "getItemsWithNewROs";
|
||||||
|
cm.Parameters.AddWithValue("@VersionID", docversionid);
|
||||||
|
cm.Parameters.AddWithValue("@OrigFSTid", origfstid);
|
||||||
|
cm.Parameters.AddWithValue("@NewFSTid", newfstid);
|
||||||
|
cm.CommandTimeout = Database.DefaultTimeout;
|
||||||
|
|
||||||
|
using (SqlDataAdapter da = new SqlDataAdapter(cm))
|
||||||
|
{
|
||||||
|
DataTable dt = new DataTable();
|
||||||
|
da.Fill(dt);
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Database.LogException("ItemInfoList.Data_GetItemsWithChangedROs", ex);
|
||||||
|
throw new DbCslaException("ItemInfoList.Data_GetItemsWithChangedROs", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
#region LoadAtOnce
|
||||||
|
// Method to Get Item and children
|
||||||
|
public static ItemInfo GetItemAndChildren(int? itemID, int? parentID)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -6215,8 +6274,13 @@ namespace VEPROMS.CSLA.Library
|
|||||||
if (!SectionHasCheckOffs()) return null;
|
if (!SectionHasCheckOffs()) return null;
|
||||||
int stpCoIndx = CheckOffIndex(); // this step has a checkoff defined
|
int stpCoIndx = CheckOffIndex(); // this step has a checkoff defined
|
||||||
if (stpCoIndx == -1) return null;
|
if (stpCoIndx == -1) return null;
|
||||||
|
//B2026-040 - Signoff/Checkoffs not printing unless set to Section Default
|
||||||
|
if (stpCoIndx > 1)
|
||||||
|
{
|
||||||
|
return ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffList[stpCoIndx]; // DO override of CheckOffList[]
|
||||||
|
}
|
||||||
|
|
||||||
int sectCoIndx = SectionDefaultCheckOffIndex(); // no checkoff on step, see if there is a section default.
|
int sectCoIndx = SectionDefaultCheckOffIndex(); // no checkoff on step, see if there is a section default.
|
||||||
if (sectCoIndx == -1) return null;
|
if (sectCoIndx == -1) return null;
|
||||||
if ((ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffOnHLSOnly && IsHigh)
|
if ((ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffOnHLSOnly && IsHigh)
|
||||||
|| (!ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffOnHLSOnly && IsLowestLevelStep && stpCheckOff)) // && !RNOsHighHasCheckOff()))
|
|| (!ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffData.CheckOffOnHLSOnly && IsLowestLevelStep && stpCheckOff)) // && !RNOsHighHasCheckOff()))
|
||||||
|
|||||||
@@ -61,57 +61,47 @@ namespace VEPROMS.CSLA.Library
|
|||||||
throw new DbCslaException("Pdf.DataPortal_Delete", ex);
|
throw new DbCslaException("Pdf.DataPortal_Delete", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// used to remove word section PDFs to force ROs to be updated when printed or saved
|
|
||||||
public static void DeleteAllDocVersion(int versionID)
|
|
||||||
{
|
|
||||||
if (!CanDeleteObject())
|
|
||||||
throw new System.Security.SecurityException("User not authorized to remove a Pdf");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
DataPortal.Delete(new VersionIDCriteria(versionID));
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
throw new DbCslaException("Error on Pdf.DeleteAllDocVersion", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[Serializable()]
|
|
||||||
protected class VersionIDCriteria
|
|
||||||
{
|
|
||||||
private int _VersionID;
|
|
||||||
public int VersionID
|
|
||||||
{ get { return _VersionID; } }
|
|
||||||
public VersionIDCriteria(int versionID)
|
|
||||||
{
|
|
||||||
_VersionID = versionID;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[Transactional(TransactionalTypes.TransactionScope)]
|
|
||||||
private void DataPortal_Delete(VersionIDCriteria criteria)
|
|
||||||
{
|
|
||||||
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] Pdf.DataPortal_Delete", GetHashCode());
|
|
||||||
try
|
|
||||||
{
|
|
||||||
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
||||||
{
|
|
||||||
using (SqlCommand cm = cn.CreateCommand())
|
|
||||||
{
|
|
||||||
cm.CommandType = CommandType.StoredProcedure;
|
|
||||||
cm.CommandTimeout = Database.SQLTimeout;
|
|
||||||
cm.CommandText = "deleteAllDocVersionPdfs";
|
|
||||||
cm.Parameters.AddWithValue("@VersionID", criteria.VersionID);
|
|
||||||
cm.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
if (_MyLog.IsErrorEnabled) _MyLog.Error("Pdf.DataPortal_Delete", ex);
|
|
||||||
_ErrorMessage = ex.Message;
|
|
||||||
throw new DbCslaException("Pdf.DataPortal_Delete", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
// used to remove word section PDFs to force ROs to be updated when printed or saved
|
||||||
|
public static void DeleteDocVersionPDFsWithNewROs(int versionID, int origfstid, int newfstid)
|
||||||
|
{
|
||||||
|
if (!CanDeleteObject())
|
||||||
|
throw new System.Security.SecurityException("User not authorized to remove a Pdf");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DeleteWithNewROs(versionID, origfstid, newfstid);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new DbCslaException("Error on Pdf.DeleteAllDocVersion", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static private void DeleteWithNewROs(int docversionID, int origfstid, int newfstid)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
||||||
|
{
|
||||||
|
using (SqlCommand cm = cn.CreateCommand())
|
||||||
|
{
|
||||||
|
cm.CommandType = CommandType.StoredProcedure;
|
||||||
|
cm.CommandTimeout = Database.SQLTimeout;
|
||||||
|
cm.CommandText = "deleteDocVersionPdfsWithNewROs";
|
||||||
|
cm.Parameters.AddWithValue("@VersionID", docversionID);
|
||||||
|
cm.Parameters.AddWithValue("@OrigFSTid", origfstid);
|
||||||
|
cm.Parameters.AddWithValue("@NewFSTid", newfstid);
|
||||||
|
cm.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
if (_MyLog.IsErrorEnabled) _MyLog.Error("Pdf.DeleteWithNewROs", ex);
|
||||||
|
throw new DbCslaException("Pdf.DeleteWithNewROs", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public partial class PdfInfo
|
public partial class PdfInfo
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -225,41 +225,54 @@ namespace VEPROMS.CSLA.Library
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// B2022-026 RO Memory Reduction code - pass in the ROFstInfo
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
public static int RefreshROFst(DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus, ROFstInfo origROFst)
|
// Refresh at item level
|
||||||
{
|
public static int RefreshROFstAtItemLevel(DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus, ROFstInfo localROFst, int origfstid, int newfstid)
|
||||||
int fixedROs = 0;
|
{
|
||||||
|
int fixedROs = 0;
|
||||||
|
|
||||||
if (dvi.DocVersionConfig.SelectedSlave <= 0)
|
if (dvi.DocVersionConfig.SelectedSlave <= 0)
|
||||||
{
|
{
|
||||||
myProgressBarRefresh(1, 100, "Update MS Word ROs");
|
// remove word section PDFs to force update of RO values when printed
|
||||||
|
myProgressBarRefresh(1, 100, "Updating MS Word ROs In Progress");
|
||||||
|
Pdf.DeleteDocVersionPDFsWithNewROs(dvi.VersionID, origfstid, newfstid);
|
||||||
|
|
||||||
Pdf.DeleteAllDocVersion(dvi.VersionID); // remove word section PDFs to force update of RO values when printed
|
//Loop Through ROs in this docversion that are different than the previous fst
|
||||||
int i = 0;
|
myProgressBarRefresh(50, 100, "Updating ROs In PROMS Steps In Progress");
|
||||||
|
int i = 0;
|
||||||
|
List<ItemInfo> list = ItemInfo.GetItemInfoWithChangedROs(dvi.VersionID, origfstid, newfstid);
|
||||||
|
foreach (ItemInfo itm in list)
|
||||||
|
{
|
||||||
|
DateTime start = DateTime.Now;
|
||||||
|
|
||||||
foreach (ProcedureInfo proc in dvi.Procedures)
|
ItemInfo.ResetROCounters();
|
||||||
{
|
myProgressBarRefresh(++i, list.Count, string.Format("{0} ({1}/{2} ROs {3})", itm.MyProcedure.DisplayNumber, i, list.Count, fixedROs));
|
||||||
DateTime start = DateTime.Now;
|
ItemInfo.RefreshReferenceObjects(itm, localROFst);
|
||||||
|
fixedROs += ItemInfo.ROFixCount;
|
||||||
|
|
||||||
ProcedureInfo.ResetROCounters();
|
TimeSpan ts = DateTime.Now - start;
|
||||||
myProgressBarRefresh(++i, dvi.Procedures.Count, string.Format("{0} ({1}/{2} ROs {3})", proc.DisplayNumber, i, dvi.Procedures.Count, fixedROs));
|
|
||||||
ProcedureInfo.RefreshReferenceObjects(proc, origROFst);
|
|
||||||
fixedROs += ProcedureInfo.ROFixCount;
|
|
||||||
|
|
||||||
TimeSpan ts = DateTime.Now - start;
|
if (tbStatus != null)
|
||||||
|
tbStatus.AppendText(string.Format("Procedure: {1}{0}, Checked {2} Referenced Objects{0}, Fixed {3} Referenced Objects{0}, Elapsed Seconds:{4}{0}{0}", Environment.NewLine, itm.MyProcedure.DisplayNumber, ItemInfo.ROCheckCount, ItemInfo.ROFixCount, ts.TotalSeconds));
|
||||||
|
}
|
||||||
|
|
||||||
if (tbStatus != null)
|
//Update the DocVersion Associations to link to the new RO FST id and current date/time
|
||||||
tbStatus.AppendText(string.Format("Procedure: {1}{0}, Checked {2} Referenced Objects{0}, Fixed {3} Referenced Objects{0}, Elapsed Seconds:{4}{0}{0}", Environment.NewLine, proc.DisplayNumber, ProcedureInfo.ROCheckCount, ProcedureInfo.ROFixCount, ts.TotalSeconds));
|
using (DocVersion dv = DocVersion.Get(dvi.VersionID))
|
||||||
}
|
{
|
||||||
}
|
if (dvi.DocVersionAssociations[0].MyROFst.ROFstID != newfstid)
|
||||||
|
{
|
||||||
|
dv.DocVersionAssociations[0].MyROFst = localROFst.GetJustROFst();
|
||||||
|
SetAssociationLastCompleted(dv, DateTime.Now.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return fixedROs;
|
return fixedROs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//C2022-028 for Admin tool to check for bad RO links
|
||||||
//C2022-028 for Admin tool to check for bad RO links
|
//B2022-144 we now loop through checked procedures list from Admin Tools and call this method for each procedure we want to process
|
||||||
//B2022-144 we now loop through checked procedures list from Admin Tools and call this method for each procedure we want to process
|
public static int CheckROLinksInThisProcedure(ProcedureInfo proc, System.Windows.Forms.TextBox tbStatus)
|
||||||
public static int CheckROLinksInThisProcedure(ProcedureInfo proc, System.Windows.Forms.TextBox tbStatus)
|
|
||||||
{
|
{
|
||||||
int FoundBadROLinks = 0;
|
int FoundBadROLinks = 0;
|
||||||
DocVersionInfo dvi = DocVersionInfo.Get(proc.MyDocVersion.VersionID);
|
DocVersionInfo dvi = DocVersionInfo.Get(proc.MyDocVersion.VersionID);
|
||||||
@@ -291,34 +304,6 @@ namespace VEPROMS.CSLA.Library
|
|||||||
return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\ROUpdateReport_" + ValidFileName.FixFileName(dvi.MyFolder.Name.Replace(" ", "_") + "_" + DateTime.Now.ToString("MM-dd-yyyy_HH-mm-ss") + ".txt");
|
return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\ROUpdateReport_" + ValidFileName.FixFileName(dvi.MyFolder.Name.Replace(" ", "_") + "_" + DateTime.Now.ToString("MM-dd-yyyy_HH-mm-ss") + ".txt");
|
||||||
}
|
}
|
||||||
|
|
||||||
// B2022-026 RO Memory Reduction code - moved the call to UpdateROFst() to before we call RefreshROFst
|
|
||||||
// so that we used the correct ROFstInfo which as the needed event methods set when updated RO Table types
|
|
||||||
public static ROFst RefreshROFst(DocVersion docver, ROFstInfo origROFst, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus)
|
|
||||||
{
|
|
||||||
ROFst rofst = null;
|
|
||||||
|
|
||||||
rofst = docver.DocVersionAssociations[0].MyROFst;
|
|
||||||
|
|
||||||
DocVersionInfo dvi = DocVersionInfo.Get(docver.VersionID);
|
|
||||||
|
|
||||||
SetAssociationLastCompleted(docver, string.Empty);
|
|
||||||
int fixedROs = RefreshROFst(dvi, myProgressBarRefresh, tbStatus, origROFst);
|
|
||||||
SetAssociationLastCompleted(docver, DateTime.Now.ToString()); // RO Update completed successfully and un-interrupted, save the date/time to the Doc Version Association config
|
|
||||||
|
|
||||||
myProgressBarRefresh(100, 100, "RO Update Complete"); // update the progress bar
|
|
||||||
System.Windows.Forms.Application.DoEvents();
|
|
||||||
|
|
||||||
// pop up a message window telling the user the RO Update has completed and how many ROs were updated
|
|
||||||
// If we are updating RO from the Admin Tools (from the V button) and we are updating more than on procedure set, then just append the "RO Update Complete" text
|
|
||||||
// To the MessageList. Once completed will all procedure sets, Admin Tools will display one message box with all the results in it.
|
|
||||||
if (MessageList == null)
|
|
||||||
FlexibleMessageBox.Show(fixedROs == 0 ? "No ROs Required Updating" : string.Format("{0} ROs Updated for {1}", fixedROs, dvi.MyFolder.Name), "RO Update Complete");
|
|
||||||
else
|
|
||||||
MessageList.AppendLine((fixedROs == 0 ? "No ROs Required Updating for " : string.Format("{0} ROs Updated for ", fixedROs)) + dvi.MyFolder.Name);
|
|
||||||
|
|
||||||
return rofst;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Updates an ro.fst into a sql database.
|
/// Updates an ro.fst into a sql database.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -670,188 +655,7 @@ namespace VEPROMS.CSLA.Library
|
|||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void UpdateROValuesText(ROFstInfo origROFstInfo, ROFst newROFst, DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, List<string> MyChangedFigureROIDs)
|
private static DateTime ShowDuration(DateTime dtLast, string message)
|
||||||
{
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Update Ro Values");
|
|
||||||
|
|
||||||
string versionList = dvi.VersionID.ToString();
|
|
||||||
|
|
||||||
ROFSTLookup origLookup = new ROFSTLookup(origROFstInfo.ROFstID, dvi);
|
|
||||||
ROFSTLookup newLookup = new ROFSTLookup(newROFst.ROFstID, dvi);
|
|
||||||
|
|
||||||
List<string> delList = new List<string>();
|
|
||||||
List<string> chgList = newLookup.GetValueDifferences(origROFstInfo.ROFstID, ref delList);
|
|
||||||
|
|
||||||
// Any figures which have been changed will be included in the list of values that have changed.
|
|
||||||
if (MyChangedFigureROIDs != null)
|
|
||||||
{
|
|
||||||
foreach (string roid in MyChangedFigureROIDs)
|
|
||||||
{
|
|
||||||
if (!chgList.Contains(roid)) chgList.Add(roid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
string RoidList = GetRoidList(newROFst.RODbID, chgList);
|
|
||||||
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
|
|
||||||
List<string> activeRoids = BuildActiveROIDsForRoUsages12(RoidList, versionList);
|
|
||||||
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Updating RO Values");
|
|
||||||
int iCount = 0;
|
|
||||||
|
|
||||||
if (activeRoids.Count > 0)
|
|
||||||
{
|
|
||||||
foreach (string chg in chgList)
|
|
||||||
{
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Updating RO Values");
|
|
||||||
if (activeRoids.Contains(chg.Substring(0, 12)))
|
|
||||||
{
|
|
||||||
ROFSTLookup.rochild roch = newLookup.GetRoChild(chg);
|
|
||||||
string desc = string.Format("Change in RO Values: Old value = {0}, New value = {1}", origLookup.GetRoChild(chg).value, roch.value);
|
|
||||||
|
|
||||||
// roid's are stored in database as 16 characters long in the RoUsages table. They may be stored as 12 characters in the ro.fst.
|
|
||||||
// string padroid = chg.Length <= 12 ? chg + "0000" : chg;
|
|
||||||
// B2022-088: Find Doc Ro button not working in Word Sections
|
|
||||||
string padroid = ROFSTLookup.FormatRoidKey(chg, true);
|
|
||||||
|
|
||||||
using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed", versionList))
|
|
||||||
{
|
|
||||||
foreach (RoUsageInfo roUsg in affected)
|
|
||||||
{
|
|
||||||
using (Content content = Content.Get(roUsg.MyContent.ContentID))
|
|
||||||
{
|
|
||||||
foreach (ItemInfo ii in roUsg.MyContent.ContentItems)
|
|
||||||
{
|
|
||||||
string val = newLookup.GetTranslatedRoValue(padroid, ii.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta, ii.ActiveFormat.PlantFormat.FormatData.SectData.UseTildaPoundCharsForSuperSubScriptInROValues, false, ii);
|
|
||||||
content.FixContentText(roUsg, val, roch.type, origROFstInfo, true);
|
|
||||||
|
|
||||||
if (content.IsDirty)
|
|
||||||
{
|
|
||||||
// Update UserID and DTS when RO Value is updated.
|
|
||||||
content.UserID = Volian.Base.Library.VlnSettings.UserID;
|
|
||||||
content.DTS = DateTime.Now;
|
|
||||||
content.Save();
|
|
||||||
|
|
||||||
if (content.MyGrid != null)
|
|
||||||
{
|
|
||||||
GridInfo.Refresh(content.MyGrid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
|
|
||||||
List<string> activeDRoids = BuildActiveROIDsForDRoUsages12(RoidList, versionList);
|
|
||||||
iCount = 0;
|
|
||||||
|
|
||||||
if (activeDRoids.Count > 0)
|
|
||||||
{
|
|
||||||
foreach (string chg in chgList)
|
|
||||||
{
|
|
||||||
// B2022-088: Find Doc Ro button not working in Word Sections
|
|
||||||
// string padroid = chg.Length <= 12 ? chg + "0000" : chg;
|
|
||||||
string padroid = ROFSTLookup.FormatRoidKey(chg, true);
|
|
||||||
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Updating RO Values");
|
|
||||||
|
|
||||||
if (activeDRoids.Contains(chg.Substring(0, 12)))
|
|
||||||
{
|
|
||||||
ROFSTLookup.rochild roch = newLookup.GetRoChild(chg);
|
|
||||||
|
|
||||||
string desc = string.Format("Change in RO Values: Old value = {0}, New value = {1}", origLookup.GetRoChild(chg).value, roch.value);
|
|
||||||
|
|
||||||
// roid's are stored in database as 16 characters long in the rousages table. They may be stored as 12 characters in the ro.fst.
|
|
||||||
using (DROUsageInfoList affected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed", versionList))
|
|
||||||
{
|
|
||||||
foreach (DROUsageInfo droUsg in affected)
|
|
||||||
{
|
|
||||||
Pdf.DeleteAll(droUsg.DocID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
iCount = 0;
|
|
||||||
string RoidDelList = GetRoidList(newROFst.RODbID, delList);
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
|
|
||||||
activeRoids = BuildActiveROIDsForRoUsages12(RoidDelList, versionList);
|
|
||||||
|
|
||||||
if (activeRoids.Count > 0)
|
|
||||||
{
|
|
||||||
foreach (string del in delList)
|
|
||||||
{
|
|
||||||
// B2022-088: Find Doc Ro button not working in Word Sections
|
|
||||||
//string padroiddel = del.Length <= 12 ? del + "0000" : del;
|
|
||||||
string padroiddel = ROFSTLookup.FormatRoidKey(del, true);
|
|
||||||
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
|
|
||||||
string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(del).value);
|
|
||||||
|
|
||||||
if (activeRoids.Contains(del.Substring(0, 12).ToUpper()))
|
|
||||||
{
|
|
||||||
using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted", versionList))
|
|
||||||
{
|
|
||||||
foreach (RoUsageInfo roUsg in affected)
|
|
||||||
{
|
|
||||||
using (Content content = Content.Get(roUsg.MyContent.ContentID))
|
|
||||||
{
|
|
||||||
content.FixContentText(roUsg, "?", 0, origROFstInfo);
|
|
||||||
if (content.IsDirty)
|
|
||||||
{
|
|
||||||
// Update UserID and DTS when RO Value is updated.
|
|
||||||
content.UserID = Volian.Base.Library.VlnSettings.UserID;
|
|
||||||
content.DTS = DateTime.Now;
|
|
||||||
content.Save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
|
|
||||||
activeDRoids = BuildActiveROIDsForDRoUsages12(RoidDelList, versionList);
|
|
||||||
iCount = 0;
|
|
||||||
|
|
||||||
if (activeDRoids.Count > 0)
|
|
||||||
{
|
|
||||||
foreach (string del in delList)
|
|
||||||
{
|
|
||||||
|
|
||||||
// B2022-088: Find Doc Ro button not working in Word Sections
|
|
||||||
string padroiddel = ROFSTLookup.FormatRoidKey(del, true);
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
|
|
||||||
|
|
||||||
string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(del).value);
|
|
||||||
|
|
||||||
// If there's an issue then maybe try getting the RoChild with the Padded roid instead
|
|
||||||
//string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(padroiddel).value);
|
|
||||||
|
|
||||||
if (activeDRoids.Contains(del.Substring(0, 12).ToUpper()))
|
|
||||||
{
|
|
||||||
using (DROUsageInfoList Daffected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted", versionList))
|
|
||||||
{
|
|
||||||
foreach (DROUsageInfo droUsg in Daffected)
|
|
||||||
{
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
|
|
||||||
Pdf.DeleteAll(droUsg.DocID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (myProgressBarRefresh != null) myProgressBarRefresh(100, 100, "RO Values Updated");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static DateTime ShowDuration(DateTime dtLast, string message)
|
|
||||||
{
|
{
|
||||||
DateTime dtNext = DateTime.Now;
|
DateTime dtNext = DateTime.Now;
|
||||||
Console.WriteLine("{0,10:#####0.00},'{1}'", TimeSpan.FromTicks(dtNext.Ticks - dtLast.Ticks).TotalSeconds, message);
|
Console.WriteLine("{0,10:#####0.00},'{1}'", TimeSpan.FromTicks(dtNext.Ticks - dtLast.Ticks).TotalSeconds, message);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -59,11 +59,11 @@ namespace Volian.Controls.Library
|
|||||||
private DisplayTags displayTags;
|
private DisplayTags displayTags;
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
public ProgressBarItem ProgressBar
|
public ProgressBarItem ProgressBar
|
||||||
{
|
{
|
||||||
get { return _progressBar; }
|
get { return _progressBar; }
|
||||||
set { _progressBar = value; }
|
set { _progressBar = value; }
|
||||||
@@ -89,7 +89,10 @@ namespace Volian.Controls.Library
|
|||||||
(_myRTB != null && (_myRTB.IsRoTable != lastRTBwasROTable || _myRTB.IsRoFigure != lastRTBwasROFigure)); }
|
(_myRTB != null && (_myRTB.IsRoTable != lastRTBwasROTable || _myRTB.IsRoFigure != lastRTBwasROFigure)); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public ROFstInfo MyROFST
|
//This flag will be set when the docversion gets updated to let it know that the full tree needs a refresh
|
||||||
|
private bool changedDocVersion = false;
|
||||||
|
|
||||||
|
public ROFstInfo MyROFST
|
||||||
{
|
{
|
||||||
get { return _myROFST; }
|
get { return _myROFST; }
|
||||||
set
|
set
|
||||||
@@ -128,16 +131,22 @@ namespace Volian.Controls.Library
|
|||||||
// B2022-135 Submitted for Admin Tools (Check RO Links tool)
|
// B2022-135 Submitted for Admin Tools (Check RO Links tool)
|
||||||
if (_docVersionInfo == null || _docVersionInfo != value || _docVersionInfo.VersionID != value.VersionID)
|
if (_docVersionInfo == null || _docVersionInfo != value || _docVersionInfo.VersionID != value.VersionID)
|
||||||
{
|
{
|
||||||
_docVersionInfo = value;
|
//Set flag for modified the docversion - should check for new ROs
|
||||||
|
if (_docVersionInfo?.VersionID != value?.VersionID)
|
||||||
|
{
|
||||||
|
changedDocVersion = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
_docVersionInfo = value;
|
||||||
|
|
||||||
if (_myRTB != null && (_docVersionInfo == null || _docVersionInfo.VersionID != _myRTB.MyDVI.VersionID))
|
if (_myRTB != null && (_docVersionInfo == null || _docVersionInfo.VersionID != _myRTB.MyDVI.VersionID))
|
||||||
{
|
{
|
||||||
_docVersionInfo = _myRTB.MyDVI;
|
_docVersionInfo = _myRTB.MyDVI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures.
|
// B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures.
|
||||||
_currDocVersionID = (_docVersionInfo != null) ? (int?)_docVersionInfo.VersionID : null;
|
_currDocVersionID = (_docVersionInfo != null) ? (int?)_docVersionInfo.VersionID : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +210,11 @@ namespace Volian.Controls.Library
|
|||||||
// B2022-098: [JPR] ROs not being resolved in Word Sections
|
// B2022-098: [JPR] ROs not being resolved in Word Sections
|
||||||
CurROLink = null;
|
CurROLink = null;
|
||||||
_savCurROLink = null;
|
_savCurROLink = null;
|
||||||
}
|
|
||||||
|
//Clear flag for modified the docversion (if should check for new ROs)
|
||||||
|
//clearing this flag here prevents it from checking twice
|
||||||
|
changedDocVersion = false;
|
||||||
|
}
|
||||||
else if(_myRTB != value)
|
else if(_myRTB != value)
|
||||||
{
|
{
|
||||||
if (_myRTB != null)
|
if (_myRTB != null)
|
||||||
@@ -221,9 +234,9 @@ namespace Volian.Controls.Library
|
|||||||
CurROLink = null;
|
CurROLink = null;
|
||||||
_savCurROLink = null;
|
_savCurROLink = null;
|
||||||
}
|
}
|
||||||
// B2023-004 assign the doc version info associated with the current RTB (rich text box)
|
// B2023-004 assign the doc version info associated with the current RTB (rich text box)
|
||||||
// this fixes an issue where unit designators could not be linked in the step edit (BNPP data)
|
// this fixes an issue where unit designators could not be linked in the step edit (BNPP data)
|
||||||
MyDvi = _myRTB.MyItemInfo.MyDocVersion;
|
MyDvi = _myRTB.MyItemInfo.MyDocVersion;
|
||||||
|
|
||||||
MyROFST = (_myRTB.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0) ? _myRTB.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst : null;
|
MyROFST = (_myRTB.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0) ? _myRTB.MyItemInfo.MyDocVersion.DocVersionAssociations[0].MyROFst : null;
|
||||||
}
|
}
|
||||||
@@ -251,11 +264,13 @@ namespace Volian.Controls.Library
|
|||||||
set { _myUserInfo = value; }
|
set { _myUserInfo = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
public SessionInfo MySessionInfo { get; set; }
|
||||||
|
|
||||||
#region Constructors
|
#endregion
|
||||||
|
|
||||||
public DisplayRO()
|
#region Constructors
|
||||||
|
|
||||||
|
public DisplayRO()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
@@ -277,48 +292,62 @@ namespace Volian.Controls.Library
|
|||||||
// Initialize the DisplayTags object
|
// Initialize the DisplayTags object
|
||||||
displayTags = new DisplayTags();
|
displayTags = new DisplayTags();
|
||||||
|
|
||||||
_progressBar = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
#region Event Handlers
|
||||||
|
#region (Progress Bar)
|
||||||
|
|
||||||
#region Event Handlers
|
private string InitialProgressBarMessage
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (ProgressBar == null) return;
|
||||||
|
ProgressBar.Value = 0;
|
||||||
|
ProgressBar.Maximum = 100;
|
||||||
|
ProgressBar.Text = value;
|
||||||
|
Application.DoEvents();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private string FinalProgressBarMessage
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (ProgressBar == null) return;
|
||||||
|
ProgressBar.Value = 100;
|
||||||
|
ProgressBar.Maximum = 100;
|
||||||
|
ProgressBar.Text = value;
|
||||||
|
Application.DoEvents();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void DoProgressBarRefresh(int value, int max, string text)
|
||||||
|
{
|
||||||
|
if (ProgressBar == null) return;
|
||||||
|
ProgressBar.Maximum = max;
|
||||||
|
ProgressBar.Value = value;
|
||||||
|
ProgressBar.Text = text;
|
||||||
|
Application.DoEvents();
|
||||||
|
}
|
||||||
|
|
||||||
#region (Progress Bar)
|
#endregion
|
||||||
|
|
||||||
private void ProgressBar_Initialize(int max, string desc)
|
#region (RTB)
|
||||||
{
|
|
||||||
if (_progressBar != null)
|
|
||||||
{
|
|
||||||
_progressBar.Maximum = max;
|
|
||||||
_progressBar.Text = desc;
|
|
||||||
_progressBar.TextVisible = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ProgressBar_SetValue(int curval)
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
{
|
// DisplayTab was changed
|
||||||
if (_progressBar != null)
|
// need to clear the RTB selected
|
||||||
{
|
// without resetting the DVI or FST
|
||||||
_progressBar.Value = curval;
|
// (those will be set manually / individually)
|
||||||
}
|
// this will prevent DVI and FST from changing to null then back again
|
||||||
}
|
// which will trigger reloads
|
||||||
|
public void ClearRTB()
|
||||||
|
{
|
||||||
|
_myRTB = null;
|
||||||
|
CurROLink = null;
|
||||||
|
_savCurROLink = null;
|
||||||
|
}
|
||||||
|
|
||||||
private void ProgressBar_Clear()
|
public void MyRTB_LinkChanged(object sender, StepPanelLinkEventArgs args)
|
||||||
{
|
|
||||||
if (_progressBar != null)
|
|
||||||
{
|
|
||||||
_progressBar.Text = string.Empty;
|
|
||||||
_progressBar.Maximum = 0;
|
|
||||||
_progressBar.Value = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region (RTB)
|
|
||||||
|
|
||||||
public void MyRTB_LinkChanged(object sender, StepPanelLinkEventArgs args)
|
|
||||||
{
|
{
|
||||||
CurROLink = null;
|
CurROLink = null;
|
||||||
if (MyRTB.MyLinkText != null) CurROLink = args.MyLinkText.MyRoUsageInfo;
|
if (MyRTB.MyLinkText != null) CurROLink = args.MyLinkText.MyRoUsageInfo;
|
||||||
@@ -565,55 +594,102 @@ namespace Volian.Controls.Library
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void lbFound_SelectedValueChanged(object sender, EventArgs e)
|
private void lbFound_SelectedValueChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (lbFound.Visible && lbFound.SelectedIndex >= 0 && lbFound.SelectedValue != null)
|
||||||
|
{
|
||||||
|
ExpandNode(Convert.ToString(lbFound.SelectedValue));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region (ROUpdate)
|
||||||
|
public List<string> roFstInfo_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args)
|
||||||
|
{
|
||||||
|
return VlnFlexGrid.ROTableUpdate(sender, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
|
// changed to return true if the RO FST got updated
|
||||||
|
public bool LoadTree(bool forceReload = false)
|
||||||
{
|
{
|
||||||
if (lbFound.Visible && lbFound.SelectedIndex >= 0 && lbFound.SelectedValue != null)
|
bool updatedROs = false;
|
||||||
{
|
|
||||||
ExpandNode(Convert.ToString(lbFound.SelectedValue));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Public Methods
|
|
||||||
|
|
||||||
public void LoadTree(bool forceReload = false)
|
|
||||||
{
|
|
||||||
if (MyROFST == null)
|
if (MyROFST == null)
|
||||||
{
|
{
|
||||||
tvROFST.Nodes.Clear();
|
tvROFST.Nodes.Clear();
|
||||||
lbFound.Visible = false;
|
lbFound.Visible = false;
|
||||||
return;
|
return updatedROs;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (forceReload || RoTreeNeedsReloaded || tvROFST.Nodes == null || tvROFST.Nodes.Count <= 0)
|
if (changedDocVersion || forceReload || RoTreeNeedsReloaded || tvROFST.Nodes == null || tvROFST.Nodes.Count <= 0)
|
||||||
{
|
{
|
||||||
//B2025-008
|
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||||
//in cases where a RO table is clicked on
|
//check if newer data - if there is, check if user wants to update data
|
||||||
//it will refresh the list
|
int fstid = MyROFSTLookup.GetNewerFSTID();
|
||||||
//temp store what the ROID was before the list refreshes
|
int origfstid = MyROFSTLookup.RofstID;
|
||||||
//so can go to it after the refresh
|
|
||||||
string tmpROID = CurROLink?.ROID;
|
|
||||||
|
|
||||||
ROFSTLookup.rodbi[] dbs = MyROFSTLookup.GetRODatabaseList(true);
|
if (_docVersionInfo != null && fstid != -1 && fstid != MyROFSTLookup.RofstID)
|
||||||
|
{
|
||||||
|
string message = string.Empty;
|
||||||
|
if (!MySessionInfo.CanCheckOutItem(_docVersionInfo.VersionID, CheckOutType.DocVersion, ref message))
|
||||||
|
{
|
||||||
|
FlexibleMessageBox.Show(this, message, "Working Draft Has Items Already Checked Out", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||||
|
FinalProgressBarMessage = "Cannot check-out Working Draft";
|
||||||
|
}
|
||||||
|
else if (changedDocVersion && MessageBox.Show($"There exists a newer ROFST for this RO database that was loaded for other sets.\r\n\r\nDo you want to update this set's ROs to be consistent/use the latest loaded ROFST?", "Load ROs", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
|
||||||
|
InitialProgressBarMessage = "Updating ROs";
|
||||||
|
|
||||||
|
ROFstInfo roFstInfo = ROFstInfo.Get(fstid);
|
||||||
|
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
||||||
|
ROFstInfo.RefreshROFstAtItemLevel(_docVersionInfo, DoProgressBarRefresh, null, roFstInfo, origfstid, fstid);
|
||||||
|
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
||||||
|
|
||||||
|
Application.DoEvents();
|
||||||
|
|
||||||
|
FinalProgressBarMessage = "ROs values updated";
|
||||||
|
MyROFST = roFstInfo;
|
||||||
|
|
||||||
|
updatedROs = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//B2025-008
|
||||||
|
//in cases where a RO table is clicked on
|
||||||
|
//it will refresh the list
|
||||||
|
//temp store what the ROID was before the list refreshes
|
||||||
|
//so can go to it after the refresh
|
||||||
|
string tmpROID = CurROLink?.ROID;
|
||||||
|
|
||||||
|
ROFSTLookup.rodbi[] dbs = MyROFSTLookup?.GetRODatabaseList(true);
|
||||||
|
|
||||||
// B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures.
|
// B2022-123: RO Tab Treeview not showing correct RO values when switching between procedures.
|
||||||
// Added optional parameter "forceReload" and cleared out any existing nodes before reloading the tree
|
// Added optional parameter "forceReload" and cleared out any existing nodes before reloading the tree
|
||||||
// the clear nodes code below has to be after the GetRODatabaseList database call because of races conditions in the code
|
// the clear nodes code below has to be after the GetRODatabaseList database call because of races conditions in the code
|
||||||
tvROFST.Nodes.Clear();
|
tvROFST.Nodes.Clear();
|
||||||
ResetSearch(); //B2023-050 need to reset the SaveRO, and any RO info that was selected last time the tree was loaded
|
ResetSearch(); //B2023-050 need to reset the SaveRO, and any RO info that was selected last time the tree was loaded
|
||||||
for (int i = 0; i < dbs.Length; i++)
|
if (dbs != null)
|
||||||
{
|
{
|
||||||
ROFSTLookup.rodbi db = dbs[i];
|
for (int i = 0; i < dbs.Length; i++)
|
||||||
|
{
|
||||||
|
ROFSTLookup.rodbi db = dbs[i];
|
||||||
|
|
||||||
TreeNode tn = new TreeNode(db.dbiTitle);
|
TreeNode tn = new TreeNode(db.dbiTitle);
|
||||||
tn.Tag = db;
|
tn.Tag = db;
|
||||||
tvROFST.Nodes.Add(tn);
|
tvROFST.Nodes.Add(tn);
|
||||||
|
|
||||||
AddDummyGroup(db, tn);
|
AddDummyGroup(db, tn);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_currRofstID = (IsRofstValid) ? (int?)_myROFST.ROFstID : null;
|
_currRofstID = (IsRofstValid) ? (int?)_myROFST.ROFstID : null;
|
||||||
_currDocVersionID = null;
|
_currDocVersionID = null;
|
||||||
@@ -621,7 +697,13 @@ namespace Volian.Controls.Library
|
|||||||
if(_docVersionInfo != null) _currDocVersionID = (int?)_docVersionInfo.VersionID;
|
if(_docVersionInfo != null) _currDocVersionID = (int?)_docVersionInfo.VersionID;
|
||||||
|
|
||||||
if (tmpROID != null) ExpandNode(ROFSTLookup.FormatRoidKey(tmpROID, true));
|
if (tmpROID != null) ExpandNode(ROFSTLookup.FormatRoidKey(tmpROID, true));
|
||||||
}
|
|
||||||
|
//doc version would have updated (if needed) so reset flag
|
||||||
|
if (_progressBar?.Text != "Cannot check-out Working Draft")
|
||||||
|
{
|
||||||
|
changedDocVersion = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var unitInfoNode = tvROFST.Nodes.Cast<TreeNode>().Where(x => x.Text == "Unit Information").FirstOrDefault();
|
var unitInfoNode = tvROFST.Nodes.Cast<TreeNode>().Where(x => x.Text == "Unit Information").FirstOrDefault();
|
||||||
|
|
||||||
@@ -672,7 +754,9 @@ namespace Volian.Controls.Library
|
|||||||
}
|
}
|
||||||
|
|
||||||
_curROTypeFilter = _roTypeFilter;
|
_curROTypeFilter = _roTypeFilter;
|
||||||
}
|
|
||||||
|
return updatedROs;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetFindDocROButton(bool enabled)
|
public void SetFindDocROButton(bool enabled)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3556,7 +3556,10 @@ namespace Volian.Controls.Library
|
|||||||
MyEditItem.SaveContents();
|
MyEditItem.SaveContents();
|
||||||
using (DocVersion dv = DocVersion.Get(Mydvi.VersionID))
|
using (DocVersion dv = DocVersion.Get(Mydvi.VersionID))
|
||||||
{
|
{
|
||||||
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(Mydvi));
|
//must get id before ROFST gets updated so know what to refresh later
|
||||||
|
int origfstid = roFstInfo.ROFstID;
|
||||||
|
|
||||||
|
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(Mydvi));
|
||||||
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
|
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
|
||||||
if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed
|
if (dv.ROfstLoadingFigures || dv.NewerRoFst) // B2017-125 see if loading figures was completed
|
||||||
{
|
{
|
||||||
@@ -3566,8 +3569,8 @@ namespace Volian.Controls.Library
|
|||||||
}
|
}
|
||||||
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
||||||
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
|
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
|
||||||
ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, null);
|
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, null, roFstInfo, origfstid, roFstInfo.ROFstID);
|
||||||
swROUpdate.Close();
|
swROUpdate.Close();
|
||||||
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
|
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
|
||||||
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
||||||
StepPanelTabDisplayEventArgs args = new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST");
|
StepPanelTabDisplayEventArgs args = new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST");
|
||||||
|
|||||||
@@ -2465,7 +2465,11 @@ namespace Volian.Controls.Library
|
|||||||
}
|
}
|
||||||
Cursor = Cursors.WaitCursor; // C2023-002: move wait cursor after check out error
|
Cursor = Cursors.WaitCursor; // C2023-002: move wait cursor after check out error
|
||||||
int ownerid = MySessionInfo.CheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion);
|
int ownerid = MySessionInfo.CheckOutItem(MyDVI.VersionID, CheckOutType.DocVersion);
|
||||||
using (DocVersion dv = DocVersion.Get(MyDVI.VersionID))
|
|
||||||
|
//must get id before ROFST gets updated so know what to refresh later
|
||||||
|
int origfstid = roFstInfo.ROFstID;
|
||||||
|
|
||||||
|
using (DocVersion dv = DocVersion.Get(MyDVI.VersionID))
|
||||||
{
|
{
|
||||||
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(MyDVI)); // RO changes placed in file in the Documents\VEPROMS folder
|
swROUpdate = new System.IO.StreamWriter(ROFstInfo.ROUpdateResultsPath(MyDVI)); // RO changes placed in file in the Documents\VEPROMS folder
|
||||||
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
|
// B2022-026 RO Memory Reduction code - first load the new ro.fst so that we can assign the ROTableUpdate event to the correct roFstInfo
|
||||||
@@ -2477,8 +2481,8 @@ namespace Volian.Controls.Library
|
|||||||
}
|
}
|
||||||
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
roFstInfo.ROTableUpdate += new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
||||||
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
|
ContentInfo.StaticContentInfoChange += ContentInfo_StaticContentInfoChange; // write changes to a text file
|
||||||
ROFst newrofst = ROFstInfo.RefreshROFst(dv, roFstInfo, DoProgressBarRefresh, null);
|
ROFstInfo.RefreshROFstAtItemLevel(DocVersionInfo.Get(dv.VersionID), DoProgressBarRefresh, null, roFstInfo, origfstid, roFstInfo.ROFstID);
|
||||||
swROUpdate.Close();
|
swROUpdate.Close();
|
||||||
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
|
ContentInfo.StaticContentInfoChange -= ContentInfo_StaticContentInfoChange;
|
||||||
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
roFstInfo.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(roFstInfo_ROTableUpdate);
|
||||||
OnTabDisplay(this, new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST"));
|
OnTabDisplay(this, new StepPanelTabDisplayEventArgs("DisplayROUpdateROFST"));
|
||||||
|
|||||||
@@ -960,7 +960,9 @@ namespace Volian.Print.Library
|
|||||||
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
|
OnStatusChanged("After NewPage", PromsPrinterStatusType.NewPage);
|
||||||
if (myProcedure.Sections == null)
|
if (myProcedure.Sections == null)
|
||||||
{
|
{
|
||||||
MessageBox.Show("This procedure has no content and will not be printed.", "Empty Procedure", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
// C2026-033 if we are running baselines, don't display the empty procedure message box, instead continue on as if OK was pressed.
|
||||||
|
if (!BaselineTesting)
|
||||||
|
MessageBox.Show("This procedure has no content and will not be printed.", "Empty Procedure", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
ProfileTimer.Pop(profileDepth);
|
ProfileTimer.Pop(profileDepth);
|
||||||
// B2024-062 Added check for EmptyProcedure. This is to prevent the Try Again message
|
// B2024-062 Added check for EmptyProcedure. This is to prevent the Try Again message
|
||||||
// from appearing after the user clicks on the OK button from the Empty Procedure message
|
// from appearing after the user clicks on the OK button from the Empty Procedure message
|
||||||
|
|||||||
@@ -2,13 +2,14 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Drawing;
|
|
||||||
using System.Drawing.Printing;
|
|
||||||
using System.Drawing.Imaging;
|
|
||||||
using System.Text;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.Drawing.Printing;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Windows.Forms;
|
||||||
using VG;
|
using VG;
|
||||||
//using XYPlots;
|
//using XYPlots;
|
||||||
|
|
||||||
@@ -21,6 +22,10 @@ namespace XYPlots
|
|||||||
public frmXYPlot(string title,string xyPlot)
|
public frmXYPlot(string title,string xyPlot)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
|
title = Regex.Replace(title, @"\\u([0-9]{1,4})\?", m => int.TryParse(m?.Groups[1]?.Value, out int result) ? Convert.ToChar(result).ToString() : ""); // C2022-003 RO Symbols. Convert unicode to character.
|
||||||
|
xyPlot = Regex.Replace(xyPlot, @"\\u([0-9]{1,4})\?", m => int.TryParse(m?.Groups[1]?.Value, out int result) ? Convert.ToChar(result).ToString() : ""); // C2022-003 RO Symbols. Convert unicode to character.
|
||||||
|
|
||||||
int pstart = xyPlot.IndexOf("<<G"); // find the starting Plot Command
|
int pstart = xyPlot.IndexOf("<<G"); // find the starting Plot Command
|
||||||
xyPlot = xyPlot.Substring(pstart); // set val to the start of the plot commands
|
xyPlot = xyPlot.Substring(pstart); // set val to the start of the plot commands
|
||||||
_XYPlot =xyPlot;
|
_XYPlot =xyPlot;
|
||||||
|
|||||||
Reference in New Issue
Block a user