616 lines
21 KiB
C#

/*********************************************************************************************
* Copyright 2005 - Volian Enterprises, Inc. All rights reserved.
* Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
* ------------------------------------------------------------------------------
* $Workfile: ApproveSelDlg.cs $ $Revision: 9 $
* $Author: Jsj $ $Date: 4/16/07 12:05p $
*
* $History: ApproveSelDlg.cs $
*
* ***************** Version 9 *****************
* User: Jsj Date: 4/16/07 Time: 12:05p
* Updated in $/LibSource/VEObject
* Clear Button needed to clear flag in Modified Lib Doc List
*
* ***************** Version 8 *****************
* User: Jsj Date: 7/21/06 Time: 2:57p
* Updated in $/LibSource/VEObject
* remove duplicates from dependency list
*
* ***************** Version 7 *****************
* User: Kathy Date: 6/21/05 Time: 7:25a
* Updated in $/LibSource/VEObject
* cleanup/bug fixes
*
* ***************** Version 6 *****************
* User: Jsj Date: 6/02/05 Time: 11:33a
* Updated in $/LibSource/VEObject
* fix for approving with conditional ROs
*
* ***************** Version 5 *****************
* User: Jsj Date: 5/17/05 Time: 11:56a
* Updated in $/LibSource/VEObject
* cleanup
*
* ***************** Version 4 *****************
* User: Kathy Date: 4/21/05 Time: 10:21a
* Updated in $/LibSource/VEObject
* print all lines for long line in report
*
* ***************** Version 3 *****************
* User: Kathy Date: 4/12/05 Time: 1:01p
* Updated in $/LibSource/VEObject
*
* ***************** Version 2 *****************
* User: Kathy Date: 3/22/05 Time: 10:02a
* Updated in $/LibSource/VEObject
* log file & edit conflict
*
* ***************** Version 1 *****************
* User: Kathy Date: 3/08/05 Time: 1:50p
* Created in $/LibSource/VEObject
* Approval
*********************************************************************************************/
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Windows.Forms;
using System.IO;
using VlnStatus;
using Utils;
namespace VEObject
{
/// <summary>
/// Summary description for ApproveSelDlg.
/// </summary>
public class ApproveSelDlg : System.Windows.Forms.Form
{
private System.Windows.Forms.ListBox listAvail;
private System.Windows.Forms.ListBox listSelect;
private System.Windows.Forms.Label lblAvail;
private System.Windows.Forms.Label lblSelected;
private System.Windows.Forms.Button btnSelect;
private System.Windows.Forms.Button btnClear;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button btnApprove;
private System.Windows.Forms.Button btnResolve;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnRpt;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
private VEO_DummySet CurDSet;
private ArrayList AppItems;
private ArrayList ModROs;
private System.Windows.Forms.ListBox listDepend;
private ArrayList ModLibDocs;
public ApproveSelDlg(ArrayList items, VEO_ProcSet curset, ArrayList mros, ArrayList mlibdocs)
{
InitializeComponent();
// procedures are stored off dummyset, which is children[1] always
CurDSet = (VEO_DummySet) curset.Children[1];
AppItems = items;
ModROs = mros;
ModLibDocs = mlibdocs;
SetUpAvailSelectLists();
VlnStatusMessage StatMsgWin = new VlnStatusMessage("Looking for Dependencies...");
StatMsgWin.StatusMessage = "Populating Dependency List";
PopulateDependList();
PopulateLogFile();
StatMsgWin.Dispose();
}
private void SetUpAvailSelectLists()
{
// add the list of procs to the selected list and
// see if there are any more selections made.
foreach (object obj in AppItems)
{
AppIndItem apitm = (AppIndItem) obj;
string UnitSpecPrcNum = ROFST_FILE.ROProcessTools.UnitSpecific(apitm.Proc._Prcnum,0,0,CurDSet.LargestNumber);
listSelect.Items.Add(UnitSpecPrcNum);
}
int cnt=0;
while (cnt < CurDSet.Children.Count)
{
VEO_Proc prc = (VEO_Proc) CurDSet.Children[cnt];
string pnum = ROFST_FILE.ROProcessTools.UnitSpecific(prc._Prcnum,0,0,CurDSet.LargestNumber);
if (!listSelect.Items.Contains(pnum)) listAvail.Items.Add(pnum);
cnt++;
}
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(ApproveSelDlg));
this.listAvail = new System.Windows.Forms.ListBox();
this.listSelect = new System.Windows.Forms.ListBox();
this.lblAvail = new System.Windows.Forms.Label();
this.lblSelected = new System.Windows.Forms.Label();
this.btnSelect = new System.Windows.Forms.Button();
this.btnClear = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.btnApprove = new System.Windows.Forms.Button();
this.btnResolve = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.btnRpt = new System.Windows.Forms.Button();
this.listDepend = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// listAvail
//
this.listAvail.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.listAvail.ItemHeight = 20;
this.listAvail.Location = new System.Drawing.Point(29, 28);
this.listAvail.Name = "listAvail";
this.listAvail.Size = new System.Drawing.Size(345, 184);
this.listAvail.TabIndex = 0;
//
// listSelect
//
this.listSelect.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.listSelect.ItemHeight = 20;
this.listSelect.Location = new System.Drawing.Point(509, 28);
this.listSelect.Name = "listSelect";
this.listSelect.Size = new System.Drawing.Size(355, 184);
this.listSelect.TabIndex = 1;
//
// lblAvail
//
this.lblAvail.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.lblAvail.Location = new System.Drawing.Point(29, 8);
this.lblAvail.Name = "lblAvail";
this.lblAvail.Size = new System.Drawing.Size(221, 16);
this.lblAvail.TabIndex = 2;
this.lblAvail.Text = "Available Procedures";
this.lblAvail.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// lblSelected
//
this.lblSelected.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.lblSelected.Location = new System.Drawing.Point(509, 8);
this.lblSelected.Name = "lblSelected";
this.lblSelected.Size = new System.Drawing.Size(249, 16);
this.lblSelected.TabIndex = 3;
this.lblSelected.Text = "Selected Procedures";
this.lblSelected.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// btnSelect
//
this.btnSelect.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.btnSelect.Location = new System.Drawing.Point(384, 32);
this.btnSelect.Name = "btnSelect";
this.btnSelect.Size = new System.Drawing.Size(120, 40);
this.btnSelect.TabIndex = 4;
this.btnSelect.Text = "Select";
this.btnSelect.Click += new System.EventHandler(this.btnSelect_Click);
//
// btnClear
//
this.btnClear.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.btnClear.Location = new System.Drawing.Point(384, 96);
this.btnClear.Name = "btnClear";
this.btnClear.Size = new System.Drawing.Size(120, 40);
this.btnClear.TabIndex = 5;
this.btnClear.Text = "Clear";
this.btnClear.Click += new System.EventHandler(this.btnClear_Click);
//
// label1
//
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.label1.Location = new System.Drawing.Point(29, 216);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(187, 18);
this.label1.TabIndex = 7;
this.label1.Text = "Dependencies Report";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// btnApprove
//
this.btnApprove.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnApprove.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.btnApprove.Location = new System.Drawing.Point(56, 616);
this.btnApprove.Name = "btnApprove";
this.btnApprove.Size = new System.Drawing.Size(216, 32);
this.btnApprove.TabIndex = 8;
this.btnApprove.Text = "Continue With Approval";
//
// btnResolve
//
this.btnResolve.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.btnResolve.Location = new System.Drawing.Point(360, 616);
this.btnResolve.Name = "btnResolve";
this.btnResolve.Size = new System.Drawing.Size(200, 32);
this.btnResolve.TabIndex = 9;
this.btnResolve.Text = "Edit Dependencies";
this.btnResolve.Click += new System.EventHandler(this.btnResolve_Click);
//
// btnCancel
//
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.btnCancel.Location = new System.Drawing.Point(648, 616);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(192, 32);
this.btnCancel.TabIndex = 10;
this.btnCancel.Text = "Cancel";
//
// btnRpt
//
this.btnRpt.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.btnRpt.Location = new System.Drawing.Point(384, 160);
this.btnRpt.Name = "btnRpt";
this.btnRpt.Size = new System.Drawing.Size(120, 46);
this.btnRpt.TabIndex = 11;
this.btnRpt.Text = "Print Report";
this.btnRpt.Click += new System.EventHandler(this.btnRpt_Click);
//
// listDepend
//
this.listDepend.Font = new System.Drawing.Font("Courier New", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.listDepend.HorizontalScrollbar = true;
this.listDepend.ItemHeight = 16;
this.listDepend.Location = new System.Drawing.Point(29, 240);
this.listDepend.Name = "listDepend";
this.listDepend.SelectionMode = System.Windows.Forms.SelectionMode.None;
this.listDepend.Size = new System.Drawing.Size(835, 356);
this.listDepend.TabIndex = 12;
//
// ApproveSelDlg
//
this.AutoScale = false;
this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(871, 662);
this.Controls.Add(this.listDepend);
this.Controls.Add(this.btnRpt);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnResolve);
this.Controls.Add(this.btnApprove);
this.Controls.Add(this.label1);
this.Controls.Add(this.btnClear);
this.Controls.Add(this.btnSelect);
this.Controls.Add(this.lblSelected);
this.Controls.Add(this.lblAvail);
this.Controls.Add(this.listSelect);
this.Controls.Add(this.listAvail);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ApproveSelDlg";
this.Text = "Approve Selected Procedures";
this.ResumeLayout(false);
}
#endregion
// if user presses Clear button, clear the selected items list, and
// reset the available to all in procedure set.
private void btnClear_Click(object sender, System.EventArgs e)
{
// reset both lists and will reset available from procedures in set.
listSelect.Items.Clear();
listAvail.Items.Clear();
AppItems.Clear(); // no procedures to approve.
SetUpAvailSelectLists();
listDepend.Items.Clear();
// Bug Fix: B2007-010
// If you don't clear the DocPages, then if you re-select
// the same procedure to approve, it will think that
// the library document check was already done - thus
// no depenencies the second time around.
foreach (ModLibDoc ml in ModLibDocs) ml.DocPages = 0;
}
private bool PopulateEditList()
{
bool hascon = false;
if (AppItems.Count<=0)
{
MessageBox.Show("No conflicts exist","Approve Selected");
return hascon;
}
VlnStatusMessage StatMsgWin = new VlnStatusMessage("Conflict Resolution...");
StatMsgWin.StatusMessage = "Populating Edit List";
// Create the reference file - use apprcon as filename
// get first item in list & use this as the procedure number.
AppIndItem apitm = (AppIndItem) AppItems[0];
string pnum = apitm.Proc._Prcnum;
RefList rl = new RefList(pnum,"apprcon",CurDSet.usrRunTime);
rl.Create();
ArrayList tarry = new ArrayList();
foreach (object obj in AppItems)
{
apitm = (AppIndItem) obj;
foreach (AppConflict ac in apitm.ConflictList)
{
hascon = true;
string strForEdit;
strForEdit = ac.GetStrForEdit();
if (!tarry.Contains(strForEdit))
{
rl.WriteRefLine(strForEdit);
tarry.Add(strForEdit);
}
// rl.WriteRefLine(ac.GetStrForEdit());
}
}
rl.WriteTotalNumRefs();
rl.CloseFile();
StatMsgWin.Dispose();
if (!hascon)
{
MessageBox.Show("No conflicts exist - cannot edit.","Approve Selected");
apitm = (AppIndItem) AppItems[0];
// note that if the following is entered as a single string (rather than
// two strings concatenated) the argument passing changes the string and
// exeadjust does not work correctly - keep as two separate strings.
string fl = apitm.Proc.usrRunTime.ExeAdjust("\xE7" + "apprcon");
if (File.Exists(fl))File.Delete(fl);
return false;
}
return true;
}
private void PopulateDependList()
{
listDepend.Items.Clear();
bool doblank = false;
foreach (object obj in AppItems)
{
AppIndItem apitm = (AppIndItem) obj;
if (doblank) // don't add a blank line the first time.
listDepend.Items.Add(" ");
else
doblank=true;
listDepend.Items.Add("Dependencies in : " + ROFST_FILE.ROProcessTools.UnitSpecific(apitm.Proc._Prcnum,0,0,CurDSet.LargestNumber));
if (apitm.ConflictList.Count==0)
listDepend.Items.Add(" None");
else
{
foreach (AppConflict ac in apitm.ConflictList)
{
StringCollection sc = ac.GetStrForDlg();
foreach (string tmpstr in sc)
{
listDepend.Items.Add(tmpstr);
}
// listDepend.Items.Add(ac.GetStrForDlg());
}
}
}
}
private void PopulateLogFile()
{
using (StreamWriter sw = new StreamWriter("Approval.log", true))
{
sw.Write("APPROVE SELECTED: Conflicts found on ");
sw.Write(DateTime.Now);
sw.WriteLine(" performed by " + DTI.Initials);
foreach (object obj in AppItems)
{
AppIndItem apitm = (AppIndItem) obj;
sw.WriteLine(" Dependencies in : " + ROFST_FILE.ROProcessTools.UnitSpecific(apitm.Proc._Prcnum,0,0,CurDSet.LargestNumber));
if (apitm.ConflictList.Count==0)
sw.WriteLine(" None");
else
{
foreach (AppConflict ac in apitm.ConflictList)
{
sw.WriteLine(ac.GetStrForDlg());
}
}
sw.WriteLine(" ");
}
sw.WriteLine(" ");
}
}
private void btnSelect_Click(object sender, System.EventArgs e)
{
if (listAvail.SelectedIndex<0)
{
MessageBox.Show("You must select an item in the list.");
return;
}
string prc_sel = (string) listAvail.Items[listAvail.SelectedIndex];
VEO_ProcSet ps = (VEO_ProcSet) CurDSet.parentObj;
// find the proc object & add it to the arraylist of procedures to process. Then
// do the individual processing on it.
foreach (Object obj in CurDSet.Children)
{
VEO_Proc prc = (VEO_Proc) obj;
string tst = ROFST_FILE.ROProcessTools.UnitSpecific(prc._Prcnum,0,0,CurDSet.LargestNumber);
if (tst==prc_sel)
{
AppIndItem aii= new AppIndItem(prc);
AppItems.Add(aii);
ps.ProcessInd(AppItems, AppItems.Count-1, ModROs, ModLibDocs);
break;
}
}
int indx=0;
VlnStatusMessage StatMsgWin = null;
while (indx>=0)
{
AppIndItem CurItem = (AppIndItem) AppItems[indx];
if (!CurItem.Checked)
{
if (StatMsgWin==null)StatMsgWin = new VlnStatusMessage("Looking for Dependencies...");
StatMsgWin.StatusMessage = "Checking " + CurItem.Proc._Prcnum;
ps.ProcessInd(AppItems, indx, ModROs, ModLibDocs);
CurItem.Checked=true;
}
indx = -1;
for (int i=0;i<AppItems.Count;i++)
{
CurItem = (AppIndItem) AppItems[i];
if (!CurItem.Checked)
{
indx=i;
break;
}
}
}
listSelect.Items.Clear();
listAvail.Items.Clear();
SetUpAvailSelectLists();
if (StatMsgWin!=null)StatMsgWin.Dispose();
PopulateDependList();
}
private void btnRpt_Click(object sender, System.EventArgs e)
{
if (this.AppItems.Count<=0)
{
MessageBox.Show("No procedures are selected to approve, no items in conflict report.","Approve Selected");
return;
}
new PrintingConflictReport(listDepend);
}
private void btnResolve_Click(object sender, System.EventArgs e)
{
bool haslist = PopulateEditList();
if (haslist)
{
AppIndItem apitm = (AppIndItem) AppItems[0];
VEO_Proc prc = apitm.Proc;
VEO_ProcSet ps = (VEO_ProcSet) CurDSet.parentObj;
ps.AppSelForEdit = prc;
prc.ExecVfw("a");
this.Close();
}
}
}
public class PrintingConflictReport
{
private System.Windows.Forms.ListBox ListToPrint;
private Font printFont;
private int CurLine;
private int PageCnt;
public PrintingConflictReport(System.Windows.Forms.ListBox listDepend)
{
CurLine=0;
PageCnt=0;
ListToPrint = listDepend;
Printing();
}
// The PrintPage event is raised for each page to be printed.
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
float linesPerPage = 0;
float yPos = 0;
int count = 0;
PageCnt++;
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
String line=null;
// Calculate the number of lines per page.
linesPerPage = ev.MarginBounds.Height /
printFont.GetHeight(ev.Graphics) ;
Font titleFont = new Font("Courier New", 12, FontStyle.Bold);
line = "Approve Selected Dependency List Report " + DateTime.Now + " Page " + PageCnt.ToString();
yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString (line, titleFont, Brushes.Black,
leftMargin, yPos, new StringFormat());
count++;
line = " ";
yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString (line, printFont, Brushes.Black,
leftMargin, yPos, new StringFormat());
count++;
// Iterate over the file, printing each line.
while (count < linesPerPage && CurLine <ListToPrint.Items.Count)
{
line = ListToPrint.Items[CurLine].ToString();
SizeF sz = ev.Graphics.MeasureString(line,printFont);
while (sz.Width>ev.MarginBounds.Width&&line.Length>85)
{
// going backwards from 85 chars, find a space to use as the line
// breaking point.
int indx = line.LastIndexOf(" ",84,85);
string sline = line.Substring(0,indx);
yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString (sline, printFont, Brushes.Black,
leftMargin, yPos, new StringFormat());
count++;
line = " " + line.Substring(indx,line.Length-indx);
}
yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString (line, printFont, Brushes.Black,
leftMargin, yPos, new StringFormat());
count++;
CurLine++;
}
// If more lines exist, print another page.
if (CurLine<ListToPrint.Items.Count)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}
// Print the file.
public void Printing()
{
printFont = new Font("Courier New", 10);
PrintDocument pd = new PrintDocument();
// Set the left and right margins to 1/2 inch.
pd.DefaultPageSettings.Margins.Left = 50;
pd.DefaultPageSettings.Margins.Right = 50;
// Set the top and bottom margins to 3/4 & 1 inch.
pd.DefaultPageSettings.Margins.Top = 75;
pd.DefaultPageSettings.Margins.Bottom = 100;
pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
// Print the document.
pd.Print();
}
}
}