Search was throwing an error if the user pressed the search button, when the the Step Type Radio button was pressed when no procedures were selected.

B2015-171 Fixed the Library Document Report.
This commit is contained in:
Rich 2015-10-29 15:25:12 +00:00
parent 265cf53f89
commit 8c76185c13
2 changed files with 167 additions and 53 deletions

View File

@ -1315,13 +1315,16 @@ namespace Volian.Controls.Library
SearchResults = ItemInfoList.GetListFromTransitionSearch(docVersionList, cbxTranFormat.SelectedIndex - 1, cbxTranCategory.SelectedItem.ToString() == "All" ? "" : cbxTranCategory.SelectedItem.ToString(), TypeSearchList);
cmbResultsStyleIndex = 3; // display step text in results
}
AddMessageForEmptyAnnotations();
if (cmbResultsStyleIndex == 3 && cmbResultsStyle.Items.Count == 3) cmbResultsStyleIndex--;
cmbResultsStyle.SelectedIndex = cmbResultsStyleIndex;
DisplayResults();
if (SearchResults != null && SearchResults.Count == 0)
if (SearchResults != null)
{
MessageBox.Show("No Matches Found.", "Search");
AddMessageForEmptyAnnotations();
if (cmbResultsStyleIndex == 3 && cmbResultsStyle.Items.Count == 3) cmbResultsStyleIndex--;
cmbResultsStyle.SelectedIndex = cmbResultsStyleIndex;
DisplayResults();
if (SearchResults != null && SearchResults.Count == 0)
{
MessageBox.Show("No Matches Found.", "Search");
}
}
}
catch (Exception ex)

View File

@ -143,7 +143,8 @@ namespace Volian.Print.Library
string[] NewPath = dvPath.Split("\x7".ToCharArray());
string sep = "";
bool foundMisMatch = false;
int n = NewPath.Length;
// n-1 Exclude the "Working Draft" entry from the list
int n = NewPath.Length-1;
int jstart = (skipFirst) ? 1 : 0;
if (StripLast)
{
@ -151,15 +152,71 @@ namespace Volian.Print.Library
if (retval.Contains("\x11"))
retval = retval.Substring(0, retval.IndexOf("\x11")); // this is the step number
}
for (int j = jstart; j < n; j++)
if (n == 0)
{
if (NewPath[j] != "" && (foundMisMatch || OldPath.Length < j + 1 || NewPath[j] != OldPath[j]))
sb.Append(dvPath);
}
else
{
for (int j = jstart; j < n; j++)
{
sb.Append(sep + "".PadLeft(2 * level) + NewPath[j].Replace("\x11", " ")).Replace(@"\u8209?", "-");
sep = "\r\n";
foundMisMatch = true;
if (NewPath[j] != "" && (foundMisMatch || OldPath.Length < j + 1 || NewPath[j] != OldPath[j]))
{
sb.Append(sep + "".PadLeft(2 * level) + NewPath[j].Replace("\x11", " ")).Replace(@"\u8209?", "-");
sep = "\r\n";
foundMisMatch = true;
}
level++;
}
}
if (sb.ToString() != "")
{
PdfPCell cell = new PdfPCell(new Phrase(sb.ToString(), f2));
cell.Colspan = 2;
cell.BackgroundColor = bgColor;
cell.BorderWidthTop = 1;
datatable.AddCell(cell);
}
return retval;
}
private string AddGroupLibDoc(PdfPTable datatable, string dvPath, string lastDvPath, Font f2, bool StripLast, Color bgColor, bool skipFirst)
{
int level = 0;
string retval = "";
StringBuilder sb = new StringBuilder();
string ttt = dvPath.Replace("\x11", " ");
string[] OldPath = lastDvPath.Split("\x7".ToCharArray());
string[] NewPath = dvPath.Split("\x7".ToCharArray());
string sep = "";
bool foundMisMatch = false;
int n = NewPath.Length - 1;
int jstart = (skipFirst) ? 1 : 0;
if (StripLast)
{
retval = NewPath[--n];
if (retval.Contains("\x11"))
retval = retval.Substring(0, retval.IndexOf("\x11")); // this is the step number
}
//If no colons output tthe entire text
if (n == 0)
{
sb.Append(dvPath);
}
else
{
for (int j = jstart; j < n; j++)
{
if (NewPath[j] != "" && (foundMisMatch || OldPath.Length < j + 1 || NewPath[j] != OldPath[j]))
{
sb.Append(sep + "".PadLeft(2 * level) + NewPath[j].Replace("\x11", " ")).Replace(@"\u8209?", "-");
sep = "\r\n";
foundMisMatch = true;
}
level++;
}
level++;
}
if (sb.ToString() != "")
{
@ -269,13 +326,22 @@ namespace Volian.Print.Library
datatable.AddCell(cell);
}
}
public void AddSubPathGroup(PdfPTable datatable, string dvPath, int splitLevel, Font f2, Color bgColor, int colSpan)
public void AddSubPathGroup(PdfPTable datatable, string oldDVPath, string dvPath, int splitLevel, Font f2, Color bgColor, int colSpan)
{
int level = 0;
StringBuilder sb = new StringBuilder();
string[] NewPath = dvPath.Split("\x7".ToCharArray());
string[] OldPath = oldDVPath.Split("\x7".ToCharArray());
string sep = "";
int n = NewPath.Length;
int n = NewPath.Length-1;
for (int i = 0; i < n; i++)
{
if (OldPath[i] != NewPath[i])
{
splitLevel = Math.Max(splitLevel, i);
break;
}
}
if (splitLevel < n)
{
for (int j = splitLevel; j < n; j++)
@ -297,7 +363,7 @@ namespace Volian.Print.Library
public void Build()
{
iTextSharp.text.Document document = new iTextSharp.text.Document(PageSize.LETTER, 36, 36, 36, 36);
if (!CreateResultsPDF(document)) return;
if (!CreateResultsPDF(document, _ReportType)) return;
try
{
switch (_ReportType) // set in the PDFReport constructor
@ -349,8 +415,15 @@ namespace Volian.Print.Library
/// </summary>
/// <param name="document"></param>
/// <returns></returns>
private bool CreateResultsPDF(iTextSharp.text.Document document)
private bool CreateResultsPDF(iTextSharp.text.Document document,int typ)
{
int topMargin = 36;
switch (typ)
{
case (int)ReportType.LibraryDocUsage:
topMargin = 80; // Add some space for the Report Header for the Library Document Report
break;
}
bool result = false;
string suffix = "";
int i = 0;
@ -362,7 +435,7 @@ namespace Volian.Print.Library
{
_MyPdfWriter = PdfWriter.GetInstance(document, new FileStream(fileName, FileMode.Create));
_MyPdfWriter.PageEvent = new MyPageHelper(_ByLine); // JSJ - 7/8/2011
document.SetMargins(36, 36, 36, 36);
document.SetMargins(36, 36, topMargin, 36);
document.Open();
_FileName = fileName;
result = true;
@ -573,41 +646,25 @@ namespace Volian.Print.Library
}
private void BuildLibDocUsageReport(iTextSharp.text.Document document)
{
float[] headerwidths = { 20, 80 };
PdfPTable datatable = new PdfPTable(1);// (headerwidths);
PdfPTable colheader = new PdfPTable(headerwidths);
datatable.HeaderRows = 3;
datatable.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin;
datatable.LockedWidth = true;
iTextSharp.text.Font f1 = pdf.GetFont("Arial Unicode MS", 14, 1, Color.BLACK);
// Adjusted from 20,80 to 25,75 to account for long Procedure Numbers
float[] headerwidths = { 25, 75 };
iTextSharp.text.Font f2 = pdf.GetFont("Arial Unicode MS", 10, 0, Color.BLACK);
iTextSharp.text.Font f3 = pdf.GetFont("Arial Unicode MS", 12, 0, Color.BLACK);
PdfPCell cell = new PdfPCell(new Phrase(ReportTitle, f1));
cell.HorizontalAlignment = Element.ALIGN_CENTER;
//cell.Colspan = 2;
cell.BackgroundColor = new Color(0xD0, 0xF0, 0xF0);
datatable.AddCell(cell);
BuildLibDocProcSetList();
int splitAt = FindSpitLevel(); // find the split level of the common path - for all procedure sets that use these library documents
AddMainPathGroup(datatable, ProcSetList[0].ToString(), splitAt, f2, Color.LIGHT_GRAY, 0);//2);
Color subHeaderColor = new Color(0xD0, 0xF0, 0xD0);
datatable.DefaultCell.Padding = 4;
datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
AddCell(colheader, "Procedure", f2, subHeaderColor);
AddCell(colheader, "Section", f2, subHeaderColor);
datatable.AddCell(colheader);
datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
int splitAt = FindSpitLevel()-1; // find the split level of the common path - for all procedure sets that use these library documents
string lastDvPath = "";
Color AnnoBackgroundColor = new Color(0xFF, 0xFF, 0xC0);
Color TextBackgroundColor = Color.WHITE;
Color NotUsedBackgroundColor = Color.WHITE;
MyPageHelper pghlp = _MyPdfWriter.PageEvent as MyPageHelper;
pghlp.HeaderTable = LibDocTable(document, headerwidths, f2,null);
foreach (DocumentInfo di in _LibDocList)
{
PdfPTable subtable = new PdfPTable(headerwidths);
subtable.HeaderRows = 0;
AddGroup(subtable, di.DocumentTitle, "", f2, false, new Color(0xC0, 0xFF, 0xC0), false); // Library Document Title
//PdfPTable datatable = LibDocTable(document, headerwidths, f2, di);
//AddMainPathGroup(datatable, ProcSetList[0].ToString(), splitAt, f2, Color.LIGHT_GRAY, 0);//2);
PdfPTable subtable;
subtable = BuildSubTable(document, headerwidths);
AddGroupLibDoc(subtable, di.DocumentTitle, "", f2, false, new Color(0xC0, 0xFF, 0xC0), false); // Library Document Title
if (di.DocumentConfig.LibDoc_Comment != null && di.DocumentConfig.LibDoc_Comment.Length > 0)
{
AddCell(subtable, "Comment", f2, AnnoBackgroundColor);
@ -615,27 +672,74 @@ namespace Volian.Print.Library
}
if (di.DocumentEntries == null || di.DocumentEntries.Count == 0)
{
AddColSpanCell(subtable, "*No References To This Library Document", f2, NotUsedBackgroundColor, 2, Element.ALIGN_LEFT);
AddGroupLibDoc(subtable, "* No References To This Library Document *", "", f2, false, TextBackgroundColor, false); // Library Document Title
}
else
{
subtable.HeaderRows = 2;
System.Collections.ArrayList LibDocUsageList = GetSortedItemInfoList(di.LibraryDocumentUsageList);
lastDvPath = "";
foreach (ItemInfo item in LibDocUsageList)//di.LibraryDocumentUsageList)
{
if (item.SearchDVPath != lastDvPath)
{
if (lastDvPath != "")
{
document.Add(subtable);
subtable = BuildSubTable(document, headerwidths);
subtable.HeaderRows = 2;
AddGroupLibDoc(subtable, di.DocumentTitle, "", f2, false, new Color(0xC0, 0xFF, 0xC0), false); // Library Document Title
}
AddSubPathGroup(subtable, lastDvPath, item.SearchDVPath, splitAt, f2, Color.LIGHT_GRAY, 2);//new Color(0xC0, 0xFF, 0xC0));
}
lastDvPath = item.SearchDVPath;
string ProcNumber = item.MyProcedure.ProcedureConfig.Number;
ProcNumber = ProcNumber.Replace(@"\u8209?", "-"); // repace unicode with dash char
ProcNumber = ProcNumber.Replace(@"\u160?", " "); // replace Hard Space with normal Space
if (item.SearchDVPath != lastDvPath)
AddSubPathGroup(subtable, item.SearchDVPath, splitAt, f2, Color.LIGHT_GRAY, 2);//new Color(0xC0, 0xFF, 0xC0));
lastDvPath = item.SearchDVPath;
AddCell(subtable, ProcNumber, f2, TextBackgroundColor);
AddCell(subtable, item.MyContent.Number + " - " + item.MyContent.Text, f2, TextBackgroundColor);
AddCell(subtable, item.DisplayNumber + " - " + item.DisplayText, f2, TextBackgroundColor);
}
}
datatable.AddCell(subtable);
document.Add(subtable);
}
document.Add(datatable);
}
private static PdfPTable BuildSubTable(iTextSharp.text.Document document, float[] headerwidths)
{
PdfPTable subtable;
subtable = new PdfPTable(headerwidths);
subtable.HeaderRows = 1;
subtable.KeepTogether = true;
subtable.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin;
subtable.LockedWidth = true;
subtable.DefaultCell.Padding = 4;
return subtable;
}
private PdfPTable LibDocTable(iTextSharp.text.Document document, float[] headerwidths, iTextSharp.text.Font f2, DocumentInfo di)
{
PdfPTable datatable = new PdfPTable(1);// (headerwidths);
PdfPTable colheader = new PdfPTable(headerwidths);
datatable.HeaderRows = 2;
datatable.KeepTogether = false;
datatable.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin;
datatable.LockedWidth = true;
iTextSharp.text.Font f1 = pdf.GetFont("Arial Unicode MS", 14, 1, Color.BLACK);
iTextSharp.text.Font f3 = pdf.GetFont("Arial Unicode MS", 12, 0, Color.BLACK);
PdfPCell cell = new PdfPCell(new Phrase(ReportTitle, f1));
cell.HorizontalAlignment = Element.ALIGN_CENTER;
//cell.Colspan = 2;
cell.BackgroundColor = new Color(0xD0, 0xF0, 0xF0);
datatable.AddCell(cell);
Color subHeaderColor = new Color(0xD0, 0xF0, 0xD0);
datatable.DefaultCell.Padding = 4;
datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
AddCell(colheader, "Procedure", f2, subHeaderColor);
AddCell(colheader, "Section", f2, subHeaderColor);
datatable.AddCell(colheader);
datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
return datatable;
}
private void AddROUsages(ItemInfo item, Dictionary<string, List<ItemInfo>> roUse)
{
@ -1307,6 +1411,12 @@ namespace Volian.Print.Library
}
public class MyPageHelper : PdfPageEventHelper
{
private PdfPTable _HeaderTable = null;
public PdfPTable HeaderTable
{
get { return _HeaderTable; }
set { _HeaderTable = value; }
}
protected PdfTemplate total;
protected BaseFont helv;
private int ptSize = 10; // text point size of page number and page total
@ -1333,9 +1443,10 @@ namespace Volian.Print.Library
{
PdfContentByte cb = writer.DirectContent;
cb.SaveState();
if (HeaderTable != null)
HeaderTable.WriteSelectedRows(0, 2, 36, document.Top+44, cb);
String text = "Page " + writer.PageNumber + " of ";
float textBase = document.Bottom - 19;//20;
float textSize = helv.GetWidthPoint(text, ptSize);
cb.BeginText();
cb.SetFontAndSize(helv, ptSize);
//if ((writer.PageNumber % 2) == 1)