1588 lines
		
	
	
		
			51 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1588 lines
		
	
	
		
			51 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
/*********************************************************************************************
 | 
						|
 * Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
 | 
						|
 * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
 | 
						|
 * ------------------------------------------------------------------------------
 | 
						|
 * $Workfile: Proc.cs $     $Revision: 26 $
 | 
						|
 * $Author: Jsj $   $Date: 9/25/06 2:08p $
 | 
						|
 *
 | 
						|
 * $History: Proc.cs $
 | 
						|
 * 
 | 
						|
 * *****************  Version 26  *****************
 | 
						|
 * User: Jsj          Date: 9/25/06    Time: 2:08p
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * allow user to move a procedure in the approved list
 | 
						|
 * 
 | 
						|
 * *****************  Version 25  *****************
 | 
						|
 * User: Jsj          Date: 8/30/06    Time: 10:04a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Added Multi Procedure Data Checker
 | 
						|
 * 
 | 
						|
 * *****************  Version 24  *****************
 | 
						|
 * User: Kathy        Date: 5/01/06    Time: 11:17a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Fix B2006-018: single quote in proc number causes problem on data
 | 
						|
 * request
 | 
						|
 * 
 | 
						|
 * *****************  Version 23  *****************
 | 
						|
 * User: Kathy        Date: 2/23/06    Time: 10:52a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Fix B2006-006, use actual database field for column mode in set file
 | 
						|
 * during approve selected. Also, don't crash on saving of column mode
 | 
						|
 * from procedure properties if value was null
 | 
						|
 * 
 | 
						|
 * *****************  Version 22  *****************
 | 
						|
 * User: Kathy        Date: 8/16/05    Time: 2:56p
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * B2005-030: error if missing ndx
 | 
						|
 * 
 | 
						|
 * *****************  Version 21  *****************
 | 
						|
 * User: Kathy        Date: 7/28/05    Time: 2:08p
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * for mod proc number, copy data into/from correct file number for
 | 
						|
 * approve ind
 | 
						|
 * 
 | 
						|
 * *****************  Version 20  *****************
 | 
						|
 * User: Kathy        Date: 7/18/05    Time: 10:55a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Lib doc transition reference may be upper or lower case
 | 
						|
 * 
 | 
						|
 * *****************  Version 19  *****************
 | 
						|
 * User: Kathy        Date: 6/21/05    Time: 7:25a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * clear variable for edit from approve
 | 
						|
 * 
 | 
						|
 * *****************  Version 18  *****************
 | 
						|
 * User: Kathy        Date: 5/25/05    Time: 10:32a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Allow edits for tmpchg
 | 
						|
 * 
 | 
						|
 * *****************  Version 17  *****************
 | 
						|
 * User: Kathy        Date: 5/19/05    Time: 11:07a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * speed up approve
 | 
						|
 * 
 | 
						|
 * *****************  Version 16  *****************
 | 
						|
 * User: Kathy        Date: 5/11/05    Time: 9:29a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * approve all selectinto
 | 
						|
 * 
 | 
						|
 * *****************  Version 15  *****************
 | 
						|
 * User: Kathy        Date: 4/26/05    Time: 10:23a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Check for dbnull on dates
 | 
						|
 * 
 | 
						|
 * *****************  Version 14  *****************
 | 
						|
 * User: Kathy        Date: 4/21/05    Time: 10:22a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * remove upgrade2005 define
 | 
						|
 * 
 | 
						|
 * *****************  Version 13  *****************
 | 
						|
 * User: Jsj          Date: 4/15/05    Time: 9:44a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * added check to see if proc number exists in set file before adding to
 | 
						|
 * dependency list
 | 
						|
 * 
 | 
						|
 * *****************  Version 12  *****************
 | 
						|
 * User: Jsj          Date: 4/08/05    Time: 10:55a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * comment about enabling slave proc number/title changes
 | 
						|
 * 
 | 
						|
 * *****************  Version 11  *****************
 | 
						|
 * User: Jsj          Date: 4/07/05    Time: 11:17a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Unit Specific call
 | 
						|
 * 
 | 
						|
 * *****************  Version 10  *****************
 | 
						|
 * User: Kathy        Date: 3/22/05    Time: 10:03a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Remove chgbar
 | 
						|
 * 
 | 
						|
 * *****************  Version 9  *****************
 | 
						|
 * User: Kathy        Date: 3/08/05    Time: 1:50p
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Approval
 | 
						|
 * 
 | 
						|
 * *****************  Version 8  *****************
 | 
						|
 * User: Kathy        Date: 1/31/05    Time: 11:06a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Fix B2005-005 (connection & delete directory errors). also, fix icon
 | 
						|
 * 
 | 
						|
 * *****************  Version 7  *****************
 | 
						|
 * User: Kathy        Date: 11/12/04   Time: 8:43a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * B2004-056: no date update on set file record when procedure data change
 | 
						|
 * 
 | 
						|
 * *****************  Version 6  *****************
 | 
						|
 * User: Jsj          Date: 8/20/04    Time: 9:02a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Disable the main form when we spawn off to  VFW.EXE so the user cannot
 | 
						|
 * select a different tree node while we are bringing up the procedure
 | 
						|
 * editor.
 | 
						|
 * 
 | 
						|
 * *****************  Version 5  *****************
 | 
						|
 * User: Jsj          Date: 8/19/04    Time: 11:37a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * fixed typo in transition usage message displayed when trying to delete
 | 
						|
 * a procedure
 | 
						|
 * 
 | 
						|
 * *****************  Version 4  *****************
 | 
						|
 * User: Jsj          Date: 8/16/04    Time: 4:23p
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * RECID not incremented inserting new procdure
 | 
						|
 * 
 | 
						|
 * *****************  Version 3  *****************
 | 
						|
 * User: Kathy        Date: 8/10/04    Time: 3:42p
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * duplicate file names on new proc & proc has wrong rec ids on new
 | 
						|
 * 
 | 
						|
 * *****************  Version 2  *****************
 | 
						|
 * User: Kathy        Date: 8/04/04    Time: 11:12a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * stop two vfw sessions from spawning on quick 2 double clicks
 | 
						|
 * 
 | 
						|
 * *****************  Version 1  *****************
 | 
						|
 * User: Kathy        Date: 7/27/04    Time: 8:53a
 | 
						|
 * Created in $/LibSource/VEObject
 | 
						|
 *********************************************************************************************/
 | 
						|
 | 
						|
using System;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Diagnostics;
 | 
						|
using System.Text;
 | 
						|
using System.Data;
 | 
						|
using System.IO;
 | 
						|
using System.Messaging;
 | 
						|
using System.Runtime.InteropServices;
 | 
						|
using System.Collections;
 | 
						|
using Utils;
 | 
						|
using VDB;
 | 
						|
using VDB_Proc;
 | 
						|
using VDB_Set;
 | 
						|
using VDB_TransUsage;
 | 
						|
using VDB_ROUsage;
 | 
						|
using VEMessageNS;
 | 
						|
using ROFST_FILE;
 | 
						|
 | 
						|
namespace VEObject
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// VEO_Proc support procedure functionality
 | 
						|
	/// </summary>
 | 
						|
	public class VEO_Proc: VEO_Base
 | 
						|
	{
 | 
						|
		public VEO_ProcExt procExt;
 | 
						|
		public string origDate;
 | 
						|
		public string origTime;
 | 
						|
		public string _Prcnum;
 | 
						|
		public string recid;
 | 
						|
		public ProcColumnOptions _ProcColumn;
 | 
						|
		public string _ProcCode;
 | 
						|
		public string origProcCode;
 | 
						|
		public DataRow pdatarow;			// row from set file.
 | 
						|
		private string[] DBExtensions={"DBF","DBT","NDX","SCR","FIX","APL","PGN","TCX","LLF","RTF","INF"};
 | 
						|
		private bool[] AppExtensions={false,false,false,false,true,false,true,false,false,false,true};
 | 
						|
		public string _ModInfo;
 | 
						|
		protected string tmpTitle;
 | 
						|
		protected string tmpProcNum;
 | 
						|
		protected ProcColumnOptions tmpProcCol;
 | 
						|
		protected bool changeProcNum;
 | 
						|
		protected bool changeTitle;
 | 
						|
		protected bool changeProcCol;
 | 
						|
		private string PrevDirectory;
 | 
						|
		private Process myProcess;
 | 
						|
		private Form mainForm;
 | 
						|
		private bool activeEdit;    // flag that vfw is currently being brought up - don't do twice, if delay
 | 
						|
 | 
						|
		public VEO_Proc(string ilocaltitle, string ipath, string iprcnum, string irecid, VEO_Base.ProcColumnOptions format, string iprccode, DataRow dr, VEO_DummySet dset, bool inew)
 | 
						|
		{
 | 
						|
			activeEdit=false;
 | 
						|
			iconStates = new int[5] {26,26,26,26,26};
 | 
						|
			procExt=null;
 | 
						|
			_Title = ilocaltitle;
 | 
						|
			_Location = ipath;
 | 
						|
			_Prcnum = iprcnum;
 | 
						|
			_ProcCode = iprccode;
 | 
						|
			origProcCode = _ProcCode;
 | 
						|
			_ProcColumn=(VEO_Base.ProcColumnOptions)format;
 | 
						|
			recid = irecid;
 | 
						|
			pdatarow = dr;
 | 
						|
			parentObj = dset;
 | 
						|
			
 | 
						|
			usrRunTime = dset.usrRunTime;
 | 
						|
			if(!inew)
 | 
						|
			{
 | 
						|
				if (dr["DATE"] is System.DBNull)
 | 
						|
				{
 | 
						|
					origDate = null;
 | 
						|
					origTime = null;
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					origDate = dr["DATE"].ToString().PadRight(8,' ');
 | 
						|
					origTime = dr["TIME"].ToString().PadRight(5,' ');
 | 
						|
				}
 | 
						|
				SetModString(dr["INITIALS"].ToString(),origDate,origTime);
 | 
						|
				DTI.SetDateTimeInit=origDate+origTime+dr["INITIALS"].ToString().PadRight(5,' ');
 | 
						|
			}	
 | 
						|
			isNew = inew;
 | 
						|
			changeProcNum=false;
 | 
						|
			changeTitle=false;
 | 
						|
			changeProcCol=false;
 | 
						|
			VEObjectType = (int)VEObjectTypesDefs.Procedure;
 | 
						|
			LoadLockInfo();
 | 
						|
			icon = iconStates[(int) Lock.LockStatus];
 | 
						|
		}
 | 
						|
 | 
						|
		[Description("FileName"),Category("Procedure"),ReadOnly(true)]public string File_Name
 | 
						|
		{
 | 
						|
			get{return _Location;}
 | 
						|
			set{_Location=value;}
 | 
						|
		}
 | 
						|
 | 
						|
		[Description("Modification Information"),Category("Procedure"),ReadOnly(true)]public string Modification_Information
 | 
						|
		{
 | 
						|
			get{return _ModInfo;}
 | 
						|
			set{_ModInfo=value;}
 | 
						|
		}
 | 
						|
 | 
						|
		[Description("Procedure Number"),Category("Procedure"),EditorAttribute(typeof(VESymbDlg), typeof(System.Drawing.Design.UITypeEditor))]public string Procedure_Number
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if(!changeProcNum)
 | 
						|
					return _Prcnum;
 | 
						|
				else
 | 
						|
					return tmpProcNum;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				changeProcNum=true;
 | 
						|
				tmpProcNum=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		[Description("Procedure Title"),Category("Procedure"),EditorAttribute(typeof(VESymbDlg), typeof(System.Drawing.Design.UITypeEditor))]public string Title
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if (!changeTitle)
 | 
						|
					return _Title;
 | 
						|
				else
 | 
						|
					return tmpTitle;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				changeTitle=true;
 | 
						|
				tmpTitle=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		[Description("Format"),Category("Procedure")]public ProcColumnOptions Procedure_Column
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if(!changeProcCol)
 | 
						|
					return _ProcColumn;
 | 
						|
				else
 | 
						|
					return tmpProcCol;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				changeProcCol=true;
 | 
						|
				tmpProcCol=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void SetModString(string person, string sdt, string tm)
 | 
						|
		{
 | 
						|
			string outtm=null;
 | 
						|
			string outdt=null;
 | 
						|
			DateTime dt;
 | 
						|
			if (tm!=null && tm!="")outtm=tm.Substring(0,2)+":"+tm.Substring(2,2);
 | 
						|
			if (sdt !=null && sdt != "")
 | 
						|
			{
 | 
						|
				dt = System.Convert.ToDateTime(sdt);
 | 
						|
				outdt = dt.ToShortDateString();
 | 
						|
			}
 | 
						|
			_ModInfo = person + "   " + outdt + "   " + outtm;
 | 
						|
		}
 | 
						|
 | 
						|
		private bool IsInSet(string fname)
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) parentObj;
 | 
						|
			VEO_Proc prc = null;
 | 
						|
			foreach (Object chld in ds.Children)
 | 
						|
			{
 | 
						|
				prc = (VEO_Proc)chld;
 | 
						|
				if (prc._Location == fname)return true;
 | 
						|
			}
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
		private void SetUpNewFileName()
 | 
						|
		{
 | 
						|
			int i=0;
 | 
						|
			StringBuilder newname = new StringBuilder();
 | 
						|
			if(!isOpen) Open();
 | 
						|
			while(i==0 || (File.Exists(newname.ToString())||IsInSet(newname.ToString())))
 | 
						|
			{
 | 
						|
				newname.Remove(0,newname.Length);
 | 
						|
				newname.Append("PROC");
 | 
						|
				string tmp = i.ToString();
 | 
						|
				newname.Append(i.ToString("d3"));
 | 
						|
				newname.Append(".dbf");
 | 
						|
				i++;
 | 
						|
			}
 | 
						|
			this._Location = newname.ToString().Substring(0,7);
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool PropertiesDlg(Object parent)
 | 
						|
		{
 | 
						|
			bool retval = false;
 | 
						|
			PrcProperties propdlg;
 | 
						|
			if (isNew) SetUpNewFileName();
 | 
						|
			propdlg = new PrcProperties(parent, this, procExt);
 | 
						|
			if (propdlg.ShowDialog() == DialogResult.OK)
 | 
						|
			{
 | 
						|
				SetModString(pdatarow["INITIALS"].ToString(),pdatarow["DATE"].ToString(),pdatarow["TIME"].ToString());
 | 
						|
				retval=true;
 | 
						|
			}
 | 
						|
			else this.Restore();
 | 
						|
			propdlg = null;
 | 
						|
			return retval;
 | 
						|
		}
 | 
						|
		
 | 
						|
		public override void Restore()
 | 
						|
		{
 | 
						|
			changeProcNum=false;
 | 
						|
			changeTitle=false;
 | 
						|
			changeProcCol=false;
 | 
						|
		}
 | 
						|
 | 
						|
		public override string GetTreeNodeText()
 | 
						|
		{
 | 
						|
			VEO_DummySet dset = (VEO_DummySet) this.parentObj;
 | 
						|
			string UnitSpecPrcNum = ROFST_FILE.ROProcessTools.UnitSpecific(Procedure_Number,0,0,dset.LargestNumber); 
 | 
						|
//			return Procedure_Number + "  " + Title;
 | 
						|
			return UnitSpecPrcNum + "  " + Title;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool Open()
 | 
						|
		{
 | 
						|
			isOpen = true;
 | 
						|
			PrevDirectory = Directory.GetCurrentDirectory();
 | 
						|
			VEO_DummySet ps = (VEO_DummySet) this.parentObj;
 | 
						|
			Directory.SetCurrentDirectory(ps._Location);
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		// The close method resets, if necessary from any multi-user settings and
 | 
						|
		// positions back to the datapath directory (which is a level above the 
 | 
						|
		// current level)
 | 
						|
		public override bool Close()
 | 
						|
		{
 | 
						|
			isOpen = false;
 | 
						|
			Directory.SetCurrentDirectory(PrevDirectory);
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		
 | 
						|
#if Upgrade2005_Print
 | 
						|
		public override bool Read(bool ChkForChldOnly)
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			string pth = ps._curDirectory + "\\" + ps._Location + "\\" + this._Location + ".dbf";
 | 
						|
			if (ChkForChldOnly)
 | 
						|
			{
 | 
						|
				try
 | 
						|
				{
 | 
						|
//					vdb_Proc dbprc = new vdb_Proc(pth);
 | 
						|
//					int cnt = dbprc.GetCount("WHERE [SEQUENCE] like ' %'");
 | 
						|
//					if (cnt>0)
 | 
						|
//					{
 | 
						|
						VEO_Section sct = new VEO_Section("XX", "XXXX", "TEMP", "XX", "0XXXXXXX"); //, this, true);
 | 
						|
						this.Children.Add(sct);
 | 
						|
//					}
 | 
						|
				}
 | 
						|
				catch (Exception e)
 | 
						|
				{
 | 
						|
					MessageBox.Show("Could not get count of sections " + e.Message);
 | 
						|
					return false;
 | 
						|
				}
 | 
						|
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				try
 | 
						|
				{
 | 
						|
					vdb_Proc dbprc = new vdb_Proc(pth);
 | 
						|
					DataSet sectset = dbprc.GetSortedByStepSeqType("WHERE [SEQUENCE] like ' %'");
 | 
						|
					/* see if in order, assuming they are because of get sorted query.. */
 | 
						|
					foreach (DataRow row in sectset.Tables[0].Rows)
 | 
						|
					{
 | 
						|
						// get properties of section & then create a section.
 | 
						|
						string Step = row["STEP"].ToString();
 | 
						|
						string Sequence = row["SEQUENCE"].ToString();
 | 
						|
						string Txt = row["TEXT"].ToString();
 | 
						|
						string Type = row["TYPE"].ToString();
 | 
						|
						string RecID = row["RECID"].ToString();
 | 
						|
						VEO_Section sct = new VEO_Section(Step, Sequence, Txt, Type, RecID, this, false);
 | 
						|
						Children.Add(sct);
 | 
						|
					}
 | 
						|
				}
 | 
						|
				catch (Exception e)
 | 
						|
				{
 | 
						|
					MessageBox.Show("Error reading sections for " + this._Prcnum + ", " + e.Message);
 | 
						|
					return false;
 | 
						|
				}
 | 
						|
			}
 | 
						|
#else
 | 
						|
		public override bool Read(bool dummy)
 | 
						|
		{
 | 
						|
			//load procs from set.dbf
 | 
						|
#endif
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool EditNode()
 | 
						|
		{
 | 
						|
			if(!isOpen) Open();
 | 
						|
			if (!activeEdit)
 | 
						|
			{
 | 
						|
				ExecVfw(null);
 | 
						|
				activeEdit=true;
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public void ExecVfw(string appendarg)
 | 
						|
		{
 | 
						|
			StringBuilder sb = new StringBuilder();
 | 
						|
			sb.Append("/c start /separate /w ");
 | 
						|
			sb.Append(this.usrRunTime.ExeAdjust("@vfw.exe"));
 | 
						|
			sb.Append(" /u-");
 | 
						|
			sb.Append(this.usrRunTime.UserID); //user login/initials
 | 
						|
			sb.Append(" -o");
 | 
						|
			sb.Append(this.usrRunTime.sec.userid.ToString());
 | 
						|
			sb.Append(" -i");   // do initials
 | 
						|
			sb.Append(this.usrRunTime.sec.initials);
 | 
						|
			sb.Append(" -s\"");
 | 
						|
			sb.Append(this.usrRunTime.syspath);
 | 
						|
			sb.Append("\\vesam.opt\" -w");
 | 
						|
			sb.Append(System.Convert.ToString(VEMessage.Handle_16bit,16));
 | 
						|
			if (appendarg !=null && appendarg=="t") 
 | 
						|
				sb.Append(" -t");
 | 
						|
			else if (appendarg !=null && appendarg=="a")
 | 
						|
				sb.Append(" -a");
 | 
						|
 | 
						|
			sb.Append(" -new");
 | 
						|
			
 | 
						|
			// execute vfw using cmd because process was not creating the vfw process in
 | 
						|
			// its own memory space, i.e. only one copy of vfw came up even if two browsers
 | 
						|
			// tried to spawn it. 
 | 
						|
			myProcess = new Process();
 | 
						|
			myProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
 | 
						|
			myProcess.StartInfo.FileName = "cmd";
 | 
						|
			myProcess.StartInfo.Arguments = sb.ToString();
 | 
						|
			myProcess.StartInfo.UseShellExecute = true;
 | 
						|
			myProcess.EnableRaisingEvents = true;
 | 
						|
			myProcess.Exited += new System.EventHandler(MyExitFunc);
 | 
						|
			// When vfw exits, 'MyExitFunc' method gets called from the above eventhandler 
 | 
						|
			// where form is made visible again & locking/connecting is checked.
 | 
						|
			
 | 
						|
			try
 | 
						|
			{
 | 
						|
				IntPtr handle = 
 | 
						|
					System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
 | 
						|
				mainForm = (Form)Form.FromHandle(handle);
 | 
						|
				mainForm.Enabled = false;
 | 
						|
				
 | 
						|
				myProcess.Start();
 | 
						|
			}
 | 
						|
			catch (Win32Exception e)
 | 
						|
			{
 | 
						|
				MessageBox.Show(e.Message + ". Error on load of vfw.");
 | 
						|
			}		
 | 
						|
		}
 | 
						|
 | 
						|
		private void MyExitFunc(object sender, System.EventArgs e)
 | 
						|
		{
 | 
						|
			mainForm.Visible = true;
 | 
						|
			mainForm.Enabled = true;
 | 
						|
			TreeView tv = null;
 | 
						|
			foreach (Control ctl in mainForm.Controls)
 | 
						|
			{
 | 
						|
				if (ctl is TreeView) tv = (TreeView)ctl;
 | 
						|
			}
 | 
						|
			if (tv != null) tv.Focus();
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			// enter the connection (reenter). This will check for changes in locking, etc.
 | 
						|
			ps.Connection.Enter(false);
 | 
						|
			if (ps.Lock.LockStatus==VENetwork.Status.LockPending) ps.Lock.LockStatus=VENetwork.Status.Locked;
 | 
						|
			ps.icon = ps.iconStates[(int)ps.Lock.LockStatus];
 | 
						|
			ps.treeNode.ImageIndex = ps.icon;
 | 
						|
			ps.treeNode.SelectedImageIndex = ps.icon;
 | 
						|
			mainForm = null;
 | 
						|
			activeEdit=false;
 | 
						|
			ps.AppSelForEdit=null;
 | 
						|
		}
 | 
						|
 | 
						|
		// see if the procedure can be deleted...
 | 
						|
		private bool canDelete()
 | 
						|
		{
 | 
						|
			// check for transitions to this procedure. If they exist, make
 | 
						|
			// up a search result list & use vfw to resolve.
 | 
						|
			VEO_DummySet pds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) pds.parentObj;
 | 
						|
			string pth = ps._curDirectory+"\\"+ps.Location+"\\tran.dbf";
 | 
						|
			vdb_TransUsage transusg = new vdb_TransUsage(pth);
 | 
						|
			DataSet ds = transusg.GetSortedByToTrans("[TONUMBER] = \'"+this._Prcnum.Replace("'","''")+"\'");
 | 
						|
			if (ds.Tables[0].Rows.Count !=0) 
 | 
						|
			{
 | 
						|
				bool is_ext=false;
 | 
						|
				foreach(DataRow dr in ds.Tables[0].Rows)
 | 
						|
				{
 | 
						|
					if (dr["FROMNUMBER"].ToString() != this._Prcnum)
 | 
						|
					{
 | 
						|
						is_ext=true;
 | 
						|
						break;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (is_ext)
 | 
						|
				{
 | 
						|
					MessageBox.Show("Delete Operation failed!\n\nYou need to remove transition references to this procedure.\n\nThe procedure editor will now display with a list of the transition locations.");
 | 
						|
					ExecVfw("t");
 | 
						|
					return false;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool Delete()
 | 
						|
		{
 | 
						|
			if (!isOpen) Open();
 | 
						|
			// first see if the procedure can be deleted (if the procedure has 
 | 
						|
			// transitions to it, it cannot be deleted). If so, do it.
 | 
						|
			if (canDelete()==false) return false;
 | 
						|
			
 | 
						|
			VEO_DummySet pds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) pds.parentObj;
 | 
						|
 | 
						|
			//Remove the transitions 'from' in the usage file.
 | 
						|
			string pth = ps._curDirectory+"\\"+ps.Location+"\\tran.dbf";
 | 
						|
			vdb_TransUsage transusg = new vdb_TransUsage(pth);
 | 
						|
			DataSet ds = transusg.GetSortedByFromTrans("[FROMNUMBER] = \'"+this._Prcnum.Replace("'","''")+"\'");
 | 
						|
			int ndr = ds.Tables[0].Rows.Count;
 | 
						|
			foreach (DataRow dr in ds.Tables[0].Rows) dr.Delete();
 | 
						|
			// if deleted any, need to save data & pack database
 | 
						|
			if (ndr>0) 
 | 
						|
			{
 | 
						|
				transusg.DB_Data = ds.Tables[0].DataSet;
 | 
						|
				transusg.Pack();
 | 
						|
			}
 | 
						|
 | 
						|
			// now, do the same for RO references
 | 
						|
			pth = ps._curDirectory+"\\"+ps.Location+"\\usagero.dbf";
 | 
						|
			vdb_ROUsage rousg = new vdb_ROUsage(pth);
 | 
						|
			ds = rousg.GetSortedByProc("[NUMBER] = \'"+this._Prcnum.Replace("'","''")+"\'");
 | 
						|
			ndr = ds.Tables[0].Rows.Count;
 | 
						|
			foreach (DataRow dr in ds.Tables[0].Rows)dr.Delete();
 | 
						|
			if (ndr>0) 
 | 
						|
			{
 | 
						|
				rousg.DB_Data = ds.Tables[0].DataSet;
 | 
						|
				rousg.Pack();
 | 
						|
			}
 | 
						|
	
 | 
						|
			// remove procedure files & related rtffiles
 | 
						|
			foreach(string str in DBExtensions)
 | 
						|
			{
 | 
						|
				// status update function - count);
 | 
						|
				string filename = pds._Location + "\\" + this._Location + "." + str;
 | 
						|
				if (File.Exists(filename)) File.Delete(filename);
 | 
						|
			}
 | 
						|
			RemoveAccessoryFiles(this._Location,"wpfiles");
 | 
						|
			RemoveAccessoryFiles(this._Location,"rtffiles");
 | 
						|
 | 
						|
			// delete the record if the above goes ok.
 | 
						|
			pdatarow.Delete();
 | 
						|
			VEO_DummySet dset = (VEO_DummySet) this.parentObj;
 | 
						|
			dset.vdbSet.DB_Data = pdatarow.Table.DataSet;
 | 
						|
 | 
						|
			// if there was a set extension record. Delete it too.
 | 
						|
			if(ps.hasExtensions)
 | 
						|
			{
 | 
						|
				procExt.drow.Delete();
 | 
						|
				dset.vdbSetExt.DB_Data = procExt.drow.Table.DataSet;
 | 
						|
				procExt=null;
 | 
						|
			}
 | 
						|
 | 
						|
			// if parent dummy set only has this child, set its icon to empty
 | 
						|
			if (dset.Children.Count<=1) IsEmpty = true;
 | 
						|
 | 
						|
			// Note that the database is not getting packed - so pack it, and
 | 
						|
			// then re-read in the data for the procs (from the parent node).
 | 
						|
			int whichone=0;
 | 
						|
			for (int i=0;i<dset.Children.Count;i++)
 | 
						|
			{
 | 
						|
				if (dset.Children[i]==this) break;
 | 
						|
				whichone++;
 | 
						|
			}
 | 
						|
			dset.PackDB(whichone);
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		private void RemoveAccessoryFiles(string dbname,string dirpath)
 | 
						|
		{
 | 
						|
			if(Directory.Exists(dirpath)==false) return;
 | 
						|
			string curdir = Directory.GetCurrentDirectory();
 | 
						|
			Directory.SetCurrentDirectory(dirpath);
 | 
						|
			string path = dbname + ".*";
 | 
						|
			string[] filelist = Directory.GetFiles(".",path);
 | 
						|
			if (filelist==null) return;
 | 
						|
			foreach(string str in filelist)
 | 
						|
			{
 | 
						|
				File.Delete(str);
 | 
						|
			}
 | 
						|
			Directory.SetCurrentDirectory(curdir);
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool Write()
 | 
						|
		{
 | 
						|
			string oldnumber=null;		// these two are used if the proc number changed
 | 
						|
			string newnumber=null;
 | 
						|
			bool dchange=false;
 | 
						|
			bool dchnglarge=false;
 | 
						|
			VEO_DummySet dset = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet pset = (VEO_ProcSet) dset.parentObj;
 | 
						|
			// use the row stored with the record, reset the fields, and
 | 
						|
			// write out to the database if any fields have changed.
 | 
						|
			// before, trim fields to max length possible in database &
 | 
						|
			// also check for largest string lengths to store in first record,
 | 
						|
			// in the 'Number' field. 
 | 
						|
			if (changeTitle && (string)pdatarow["TITLE"]!=tmpTitle)
 | 
						|
			{
 | 
						|
				int ptlength = pset.UseLongProcTitles?249:78;
 | 
						|
				tmpTitle = tmpTitle.Substring(0,tmpTitle.Length>ptlength?ptlength:tmpTitle.Length);
 | 
						|
				pdatarow["TITLE"] = tmpTitle;
 | 
						|
				_Title = tmpTitle;
 | 
						|
				changeTitle=false;
 | 
						|
				dchange=true;
 | 
						|
				if (tmpTitle.Length+1 > dset.LargestTitleForMenu)
 | 
						|
				{
 | 
						|
					dset.LargestTitleForMenu = tmpTitle.Length+1;
 | 
						|
					dchnglarge=true;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			if (changeProcNum && (string)pdatarow["NUMBER"]!=tmpProcNum)
 | 
						|
			{
 | 
						|
				if(tmpProcNum.Length>20) tmpProcNum= tmpProcNum.Substring(0,20);
 | 
						|
				oldnumber=_Prcnum;
 | 
						|
				newnumber=tmpProcNum;
 | 
						|
				pdatarow["NUMBER"] = tmpProcNum;
 | 
						|
				_Prcnum = tmpProcNum;
 | 
						|
				dchange=true;
 | 
						|
				if (tmpProcNum.Length+1 > dset.LargestNumber)
 | 
						|
				{
 | 
						|
					dset.LargestNumber = tmpProcNum.Length+1;
 | 
						|
					dchnglarge=true;
 | 
						|
				}
 | 
						|
				if ((tmpProcNum.Substring(0,1)!=" ") && tmpProcNum.Length+1>dset.LargestNumberForMenu)
 | 
						|
				{
 | 
						|
					dset.LargestNumberForMenu = tmpProcNum.Length+1;
 | 
						|
					dchnglarge= true;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			
 | 
						|
			int itmpcol = (int)Procedure_Column+1;
 | 
						|
			string stmpcol=itmpcol.ToString();
 | 
						|
			// check that the internal temporary column wasn't set to a default value of 2, 
 | 
						|
			// this is set when the FORMAT field = null or 0. The Browser (and original DMAS)
 | 
						|
			// did not look at the format file value PMODE, as it should, to determine
 | 
						|
			// the default. This cannot be fixed at this time because during the format files
 | 
						|
			// are not read/parsed to get the value of PMODE.
 | 
						|
			bool deflt = (pdatarow["FORMAT"] is System.DBNull || (string)pdatarow["FORMAT"]=="0")&&stmpcol=="2";
 | 
						|
			bool datadiff=false;
 | 
						|
			if (pdatarow["FORMAT"] is System.DBNull)
 | 
						|
			{
 | 
						|
				if (stmpcol!="2") datadiff=true;
 | 
						|
			}
 | 
						|
			else
 | 
						|
				datadiff = (string)pdatarow["FORMAT"]!=stmpcol;
 | 
						|
 | 
						|
			if (changeProcCol && datadiff && !deflt)
 | 
						|
			{
 | 
						|
				pdatarow["FORMAT"] = stmpcol;
 | 
						|
				_ProcColumn=Procedure_Column;
 | 
						|
				changeProcCol=false;
 | 
						|
				dchange=true;
 | 
						|
			}
 | 
						|
 | 
						|
			if(origProcCode != _ProcCode)
 | 
						|
			{
 | 
						|
				pdatarow["PROCCODE"] = _ProcCode;
 | 
						|
				dchange=true;
 | 
						|
			}
 | 
						|
			if(dchange)
 | 
						|
			{
 | 
						|
				try
 | 
						|
				{
 | 
						|
					// modify the first record if the largest string length changed.
 | 
						|
					if (dchnglarge)
 | 
						|
					{
 | 
						|
						DataRow recidrow = pdatarow.Table.Rows[0];
 | 
						|
						string padstr1 = dset.LargestNumber.ToString("d2").PadLeft(2,'0');
 | 
						|
						string padstr2 = dset.LargestNumberForMenu.ToString("d2").PadLeft(2,'0');
 | 
						|
						string padstr3 = dset.LargestTitleForMenu.ToString("d2").PadLeft(2,'0');
 | 
						|
						recidrow["NUMBER"] = padstr1 + " " + padstr2 + " " + padstr3; 
 | 
						|
					}
 | 
						|
					dset.vdbSet.DB_Data = pdatarow.Table.DataSet;
 | 
						|
				}
 | 
						|
				catch (Exception e)
 | 
						|
				{
 | 
						|
					MessageBox.Show(e.Message);
 | 
						|
					return false;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			// see if this has a setext to save....
 | 
						|
			
 | 
						|
			if (pset.hasExtensions)
 | 
						|
			{
 | 
						|
				bool ret = this.procExt.Write(dset);
 | 
						|
				if (!ret) return false;
 | 
						|
			}
 | 
						|
 | 
						|
			// if the procedure number was changed, then need to update usage files
 | 
						|
			// with the new procnumber
 | 
						|
			if (changeProcNum && (newnumber != oldnumber))
 | 
						|
			{
 | 
						|
				//Remove the transitions 'from' in the usage file.
 | 
						|
				string pth = pset._curDirectory+"\\"+pset.Location+"\\tran.dbf";
 | 
						|
				vdb_TransUsage transusg = new vdb_TransUsage(pth);
 | 
						|
				transusg.UpdateProcNumber(oldnumber,newnumber);
 | 
						|
				transusg=null;
 | 
						|
 | 
						|
				pth = pset._curDirectory+"\\"+pset.Location+"\\usagero.dbf";
 | 
						|
				vdb_ROUsage rousage = new vdb_ROUsage(pth);
 | 
						|
				rousage.UpdateProcNumber(oldnumber,newnumber);
 | 
						|
				rousage=null;
 | 
						|
				changeProcNum=false;
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		// Make an initial dummy step.
 | 
						|
		static void CreateInitStep(vdb_Proc prc)
 | 
						|
			{
 | 
						|
			// update the recid
 | 
						|
			DataTable tbl = prc.DB_Data.Tables[0];
 | 
						|
			DataRow recidrow = tbl.Rows[0];
 | 
						|
			string tmprecid = recidrow["RECID"].ToString();
 | 
						|
			int irecid = System.Convert.ToInt32(tmprecid.Substring(2,6));
 | 
						|
			irecid++;
 | 
						|
			tmprecid = tmprecid.Substring(0,2)+irecid.ToString("d6");
 | 
						|
			recidrow["RECID"]=tmprecid;
 | 
						|
 | 
						|
			// add the new row for the first section
 | 
						|
			DataRow pdatarow = tbl.NewRow();
 | 
						|
			pdatarow["RECID"] = "00000002";
 | 
						|
			pdatarow["STEP"] = "A1";
 | 
						|
			pdatarow["SEQUENCE"] = "S";
 | 
						|
			pdatarow["TEXT"] = "Dummy Step";
 | 
						|
			pdatarow["TYPE"] = "01";
 | 
						|
			DateTime tm = System.DateTime.Now;
 | 
						|
			pdatarow["DATE"] = tm.ToString("MM/dd/yyyy");
 | 
						|
			pdatarow["TIME"] = tm.ToString("HHmm") + ":";
 | 
						|
			tbl.Rows.Add(pdatarow);
 | 
						|
			prc.DB_Data = pdatarow.Table.DataSet;
 | 
						|
		}
 | 
						|
 | 
						|
		// Make an initial procedure step section.
 | 
						|
		static void CreateInitSection(vdb_Proc prc)
 | 
						|
		{
 | 
						|
			// update the recid
 | 
						|
			DataTable tbl = prc.DB_Data.Tables[0];
 | 
						|
			DataRow recidrow = tbl.Rows[0];
 | 
						|
			string tmprecid = recidrow["RECID"].ToString();
 | 
						|
			int irecid = System.Convert.ToInt32(tmprecid.Substring(2,6));
 | 
						|
			irecid++;
 | 
						|
			tmprecid = tmprecid.Substring(0,2)+irecid.ToString("d6");
 | 
						|
			recidrow["RECID"]=tmprecid;
 | 
						|
 | 
						|
			// add the new row for the first section
 | 
						|
			DataRow pdatarow = tbl.NewRow();
 | 
						|
			pdatarow["RECID"] = "00000001";
 | 
						|
			pdatarow["STEP"] = "A0";
 | 
						|
			pdatarow["SEQUENCE"] = " 1X";
 | 
						|
			pdatarow["TEXT"] = "Procedure Steps";
 | 
						|
			pdatarow["TYPE"] = "01";
 | 
						|
			DateTime tm = System.DateTime.Now;			
 | 
						|
			pdatarow["DATE"] = tm.ToString("MM/dd/yyyy");
 | 
						|
			pdatarow["TIME"] = tm.ToString("HHmm") + ":";
 | 
						|
			tbl.Rows.Add(pdatarow);
 | 
						|
			prc.DB_Data = pdatarow.Table.DataSet; //save the changed dataset info
 | 
						|
		}
 | 
						|
 | 
						|
		// Create a new procedure.
 | 
						|
		public override bool SaveNew(string dummy)
 | 
						|
		{
 | 
						|
			try 
 | 
						|
			{
 | 
						|
				VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
				VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
				// check for a valid name.
 | 
						|
				// create the new procedure file, create the initial section & initial step.
 | 
						|
				vdb_Proc newprc = new vdb_Proc("");
 | 
						|
				newprc.CreateTable(this._Location);
 | 
						|
				CreateInitSection(newprc);		// Make procedure section
 | 
						|
				CreateInitStep(newprc);			// Add a dummy step
 | 
						|
 | 
						|
				// Add the record to the set file.
 | 
						|
				DataTable pdatatable = ds.vdbSet.DB_Data.Tables[0];
 | 
						|
				DataRow recidrow = pdatatable.Rows[0];
 | 
						|
				string currecid = recidrow["RECID"].ToString();
 | 
						|
				string tmprecid = currecid;
 | 
						|
				int irecid = System.Convert.ToInt32(tmprecid.Substring(2,6));
 | 
						|
				irecid++;
 | 
						|
				tmprecid = tmprecid.Substring(0,2)+irecid.ToString("d6");
 | 
						|
				recidrow["RECID"]=tmprecid;
 | 
						|
				pdatarow = pdatatable.NewRow();
 | 
						|
			
 | 
						|
				// check whether to trim the number & title.
 | 
						|
				if (Procedure_Number.Length>20)Procedure_Number=Procedure_Number.Substring(0,20);
 | 
						|
				if (Title.Length>78)Title=Title.Substring(0,78);
 | 
						|
				pdatarow["RECID"] = currecid;
 | 
						|
				pdatarow["TITLE"] = Title;
 | 
						|
				pdatarow["NUMBER"] = Procedure_Number;
 | 
						|
				int itmpcol = (int)Procedure_Column+1;
 | 
						|
				pdatarow["FORMAT"] = itmpcol.ToString();
 | 
						|
				pdatarow["ENTRY"] = _Location;
 | 
						|
				DateTime tm = System.DateTime.Now;
 | 
						|
				pdatarow["DATE"] = tm.ToString("MM/dd/yyyy");
 | 
						|
				pdatarow["TIME"] = tm.ToString("HHmm") + ":";
 | 
						|
				pdatarow["PROCCODE"] = _ProcCode;
 | 
						|
				pdatatable.Rows.Add(pdatarow);
 | 
						|
 | 
						|
				// See if this proc's data changes the largest numbers stored
 | 
						|
				// in the first record.
 | 
						|
				bool chg = false;
 | 
						|
				if (Procedure_Number.Length+1 > ds.LargestNumber) 
 | 
						|
				{
 | 
						|
					chg=true;
 | 
						|
					ds.LargestNumber = Procedure_Number.Length+1;
 | 
						|
				}
 | 
						|
				if ((Procedure_Number.Substring(0,1)!=" ") && (Procedure_Number.Length+1>ds.LargestNumberForMenu)) 
 | 
						|
				{
 | 
						|
					chg=true;
 | 
						|
					ds.LargestNumberForMenu = Procedure_Number.Length+1;
 | 
						|
				}
 | 
						|
				if (Title.Length+1 > ds.LargestTitleForMenu)
 | 
						|
				{
 | 
						|
					chg=true;
 | 
						|
					ds.LargestTitleForMenu = Title.Length+1;
 | 
						|
				}
 | 
						|
				if (chg)
 | 
						|
				{
 | 
						|
					string padstr1 = ds.LargestNumber.ToString("d2").PadLeft(2,'0');
 | 
						|
					string padstr2 = ds.LargestNumberForMenu.ToString("d2").PadLeft(2,'0');
 | 
						|
					string padstr3 = ds.LargestTitleForMenu.ToString("d2").PadLeft(2,'0');
 | 
						|
					recidrow["NUMBER"] = padstr1 + " " + padstr2 + " " + padstr3;
 | 
						|
				}
 | 
						|
				ds.vdbSet.DB_Data = pdatarow.Table.DataSet;
 | 
						|
				_Title=Title;
 | 
						|
				_Prcnum=Procedure_Number;
 | 
						|
				_ProcColumn=Procedure_Column;
 | 
						|
				changeTitle=false;
 | 
						|
				changeProcCol=false;
 | 
						|
				changeProcNum=false;
 | 
						|
 | 
						|
				if (ps.hasExtensions) this.procExt.SaveNew(this, tmprecid);
 | 
						|
				isNew=false;
 | 
						|
				ds.icon = ds.iconStates[0];  // in case it was empty
 | 
						|
			}
 | 
						|
			catch (Exception e)
 | 
						|
			{
 | 
						|
				MessageBox.Show(e.Message,"Could not perform database functions required to add procedure.");
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool updateROValues()
 | 
						|
		{
 | 
						|
			// update the ro values for this procset, so get parent's (dummy set), parent
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			return ps.updateROValues();
 | 
						|
		}
 | 
						|
 | 
						|
		public override void CleanTransitionsAndROsUsages(int clntype,string ProcName) 
 | 
						|
		{
 | 
						|
			// clean, send this procname to procedure set to spawn the clean
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			ps.CleanTransitionsAndROsUsages(clntype,this._Prcnum);
 | 
						|
		}
 | 
						|
 | 
						|
		public override void ApproveProcedures(int aptype, ArrayList procs)
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			if (aptype == 0)
 | 
						|
				ps.ApproveProcedures(aptype,null);
 | 
						|
			else if (procs.Count>0)
 | 
						|
				ps.ApproveProcedures(aptype,procs);
 | 
						|
			else
 | 
						|
			{
 | 
						|
				ArrayList prcs = new ArrayList();
 | 
						|
				prcs.Add(this);
 | 
						|
				ps.ApproveProcedures(aptype,prcs);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public override void DataIntegrityCheck(string ProcName) 
 | 
						|
		{
 | 
						|
			// send this procname to procedure set to spawn the DataCheck
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			ps.DataIntegrityCheck(this._Prcnum);
 | 
						|
		}
 | 
						|
 | 
						|
		private void MoveFixFile(string apname, string appath, VEO_ProcSet ps)
 | 
						|
		{
 | 
						|
			string[] FxExt = {".FIX",".FX1",".FX2",".FX3",".FX4",".FX5",".FX6",".FX7",".FX8"};
 | 
						|
			string apvname = (apname==null || apname == "")?_Location:apname;
 | 
						|
			foreach (string str in FxExt)
 | 
						|
				ps.CopyAnyFileToApproved(_Location+str,apvname+str,appath);
 | 
						|
		}
 | 
						|
 | 
						|
		private void FixProcDateAndTime(string apname, VEO_ProcSet ps)
 | 
						|
		{
 | 
						|
			string[] extensions = {".dbf",".dbt",".ndx"};
 | 
						|
			string appath = null;
 | 
						|
			string wd = null;
 | 
						|
			string apvname = (apname==null||apname=="")?_Location:apname;
 | 
						|
			foreach (string str in extensions)
 | 
						|
			{
 | 
						|
				appath = ps.GetApprovedDirectory("\\") + apvname + str;
 | 
						|
				wd = _Location + str;
 | 
						|
				FileInfo fi_app = new FileInfo(appath);
 | 
						|
				FileInfo fi_wd = new FileInfo(wd);
 | 
						|
				fi_app.LastWriteTime = fi_wd.LastWriteTime;
 | 
						|
				File.Copy(appath, wd, true);
 | 
						|
				fi_app = new FileInfo(appath);
 | 
						|
				fi_wd = new FileInfo(wd);
 | 
						|
				fi_app.LastWriteTime = fi_wd.LastWriteTime;
 | 
						|
				fi_wd.LastWriteTime = fi_app.LastWriteTime;
 | 
						|
			}	
 | 
						|
		}
 | 
						|
 | 
						|
		public void Copy(string srcdir, string destdir, string prcnum, string prcfile)
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) parentObj;		
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			// if there is a new procedure to add for a modified proc number, 
 | 
						|
			// prcfile will not == the _Location. Use it instead.
 | 
						|
			string loc=null;
 | 
						|
			if (prcfile != _Location)
 | 
						|
				loc = prcfile;
 | 
						|
			else
 | 
						|
				loc = _Location;
 | 
						|
			string destfile = destdir + "\\" + loc;
 | 
						|
			string srcfile = (srcdir==null)? _Location: srcdir + "\\" + _Location;
 | 
						|
 | 
						|
			if (!File.Exists(srcfile+".dbf")) return;
 | 
						|
			if (File.Exists(destfile+".dbf")) File.Delete(destfile+".dbf");
 | 
						|
			if (File.Exists(destfile+".ndx")) File.Delete(destfile+".ndx");
 | 
						|
			if (File.Exists(destfile+".dbt")) File.Delete(destfile+".dbt");
 | 
						|
			
 | 
						|
			vdb_Proc dbprc = null;
 | 
						|
			try
 | 
						|
			{		
 | 
						|
				dbprc = new vdb_Proc(srcfile+".dbf");
 | 
						|
				// Use SelectIntoNewTable to create the table & copy it over using
 | 
						|
				// sql select * into ... Then just make an instance of the table, this
 | 
						|
				// will set up indexes and inf files as necessary.
 | 
						|
				dbprc.SelectIntoNewTable(srcdir+"\\"+destfile);
 | 
						|
				string cwd = Directory.GetCurrentDirectory();
 | 
						|
				Directory.SetCurrentDirectory(destdir);
 | 
						|
				vdb_Proc apprc = new vdb_Proc(loc+".dbf");
 | 
						|
				Directory.SetCurrentDirectory(cwd);
 | 
						|
				apprc=null;
 | 
						|
			}
 | 
						|
			catch (Exception e)
 | 
						|
			{
 | 
						|
				MessageBox.Show("Could not copy " + _Location + " to approved." + e.Message);
 | 
						|
				return;
 | 
						|
			}
 | 
						|
 | 
						|
			// now copy over rtf files by finding the procedure records that are attachments.
 | 
						|
			DataSet accset=null;
 | 
						|
			try
 | 
						|
			{
 | 
						|
				accset = dbprc.GetSortedByStepSeqType("WHERE [SEQUENCE] like ' %'");
 | 
						|
			}
 | 
						|
			catch (Exception e)
 | 
						|
			{
 | 
						|
				MessageBox.Show("Could not copy over accessory page files " + this._Prcnum + ", " + e.Message);
 | 
						|
				return;
 | 
						|
			}
 | 
						|
			string rtfsrcdir = srcdir + "\\rtffiles\\" + this._Location + ".A";
 | 
						|
			string rtfdestdir = destdir + "\\rtffiles\\" + prcfile + ".A";
 | 
						|
			foreach (DataRow dr in accset.Tables[0].Rows)
 | 
						|
			{
 | 
						|
				bool accpage = (char.IsLetter(dr["STEP"].ToString()[1]))?true:false;
 | 
						|
				if (accpage)
 | 
						|
				{
 | 
						|
					string stpno = (string) dr["STEP"].ToString();
 | 
						|
					char accsect = stpno[0];
 | 
						|
					string tmpext = (accsect-'@').ToString("D2");
 | 
						|
					if (File.Exists(rtfsrcdir+tmpext))
 | 
						|
						File.Copy(rtfsrcdir+tmpext,rtfdestdir+tmpext,true);
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			for (int i=0;i<AppExtensions.Length;i++)
 | 
						|
				if (AppExtensions[i] && File.Exists(srcfile+"."+DBExtensions[i])) File.Copy(srcfile+"."+DBExtensions[i],destfile+"."+DBExtensions[i],true);
 | 
						|
 | 
						|
			MoveFixFile(prcfile, null, ps);
 | 
						|
			if (ps.RmChgBarOnApp&&File.Exists(_Location+".scr"))File.Delete(_Location+".scr");
 | 
						|
			FixProcDateAndTime(prcfile, ps);
 | 
						|
		}
 | 
						|
		
 | 
						|
		private AppIndItem InAppIndList(string prnum, ArrayList al)
 | 
						|
		{
 | 
						|
			AppIndItem cur=null;
 | 
						|
			foreach (object obal in al)
 | 
						|
			{
 | 
						|
				AppIndItem aiiobj = (AppIndItem) obal;
 | 
						|
				if (aiiobj.Proc._Prcnum == prnum)
 | 
						|
				{
 | 
						|
					cur=aiiobj;
 | 
						|
					break;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			// if it is not in the list, add it.
 | 
						|
			if (cur==null) 
 | 
						|
			{
 | 
						|
				VEO_DummySet ds = (VEO_DummySet) parentObj;
 | 
						|
				VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
				foreach(VEO_Proc prc in ds.Children)
 | 
						|
				{
 | 
						|
					if (prc._Prcnum==prnum)
 | 
						|
					{
 | 
						|
						cur = new AppIndItem(prc);
 | 
						|
						al.Add(cur);
 | 
						|
						break;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return cur;
 | 
						|
		}
 | 
						|
 | 
						|
		private void FlagProcsUsingThisDoc(string ldname, ArrayList al)
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
 | 
						|
			// Library documents can be found in the transition file, in the 'to'
 | 
						|
			// field.
 | 
						|
			vdb_TransUsage transusg = new vdb_TransUsage(ps._curDirectory + "\\" + ps._Location + "\\tran.dbf");
 | 
						|
			DataSet trset = transusg.GetSortedByToTrans("[TONUMBER] = \'"+ldname.ToUpper().Replace("'","''")+"\' OR [TONUMBER] =\'"+ldname.ToLower().Replace("'","''")+"\'");
 | 
						|
			foreach(DataRow adr in trset.Tables[0].Rows)
 | 
						|
			{
 | 
						|
				// verify that this is not the current procedure. Add the procedure
 | 
						|
				// to the to-check list (if not in there, use InAppIndList) and then
 | 
						|
				// add the conflict. Also, check for transition type of 6 (outside),
 | 
						|
				// for those don't add them either.
 | 
						|
				string pnumFrom = adr["FROMNUMBER"].ToString();
 | 
						|
				string seq = adr["FROMSEQUEN"].ToString();
 | 
						|
				string typ = adr["TYPE"].ToString();
 | 
						|
				AppIndItem cur = null;
 | 
						|
				
 | 
						|
				if (typ != "6" && ps.ProcedureNumberInSet(pnumFrom))
 | 
						|
				{
 | 
						|
					cur = InAppIndList(pnumFrom,al);
 | 
						|
					AppLibDocConflict ldc = new AppLibDocConflict(ds,pnumFrom, seq, ldname);
 | 
						|
					cur.AddConflict(ldc);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	
 | 
						|
		private void CheckForUnusedDoc(ArrayList al, ArrayList ModLibDocs, ArrayList ModROs, string libdoc)
 | 
						|
		{
 | 
						|
			foreach (ModLibDoc ml in ModLibDocs)
 | 
						|
			{
 | 
						|
				int indx = ml.LibFile.IndexOf(".");
 | 
						|
				string lname=null;
 | 
						|
				if (indx==-1)
 | 
						|
					lname = ml.LibFile;
 | 
						|
				else
 | 
						|
					lname = ml.LibFile.Substring(0,indx);
 | 
						|
				if(ml.DocPages==0 && libdoc.ToUpper() == lname.ToUpper())
 | 
						|
				{
 | 
						|
					ml.DocPages=1;
 | 
						|
					FlagProcsUsingThisDoc(lname, al);
 | 
						|
					VEO_DummySet ds = (VEO_DummySet) parentObj;
 | 
						|
					VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
					Usages.CheckRoReferences(ps, ps._curDirectory+"\\"+ps._Location,al,ModROs,lname);
 | 
						|
					return;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// for this procedure, check if it has any library document references. If so,
 | 
						|
		// see if the library document used is in the modified list. If so, see if other
 | 
						|
		// procedures use it & add them to the list of procs to process.
 | 
						|
		public bool CheckLibraryDocReferences(ArrayList al, int indx, ArrayList ModLibDocs, ArrayList ModROs)
 | 
						|
		{
 | 
						|
 | 
						|
			AppIndItem appitm = (AppIndItem) al[indx];
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			vdb_Proc dbprc = null;
 | 
						|
			DataSet accset = null;
 | 
						|
 | 
						|
			// For this procedure, get any sections that are 'accessory pages'. Only
 | 
						|
			// those can reference a library document.
 | 
						|
			string pth = ps._curDirectory + "\\" + ps._Location + "\\" + this._Location + ".dbf";
 | 
						|
			try
 | 
						|
			{
 | 
						|
				dbprc = new vdb_Proc(pth);
 | 
						|
				accset = dbprc.GetSortedByStepSeqType("WHERE [SEQUENCE] like ' %'");
 | 
						|
			}
 | 
						|
			catch (Exception e)
 | 
						|
			{
 | 
						|
				MessageBox.Show("Could not get usages for the library document " + this._Prcnum + ", " + e.Message);
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
 | 
						|
			// for each accessory page, see if it has a library document.
 | 
						|
			foreach (DataRow dr in accset.Tables[0].Rows)
 | 
						|
			{
 | 
						|
				bool accpage = (char.IsLetter(dr["STEP"].ToString()[1]))?true:false;
 | 
						|
				if (accpage)
 | 
						|
				{
 | 
						|
					// check to see if this is using a library document, and if so
 | 
						|
					// check to see if it is one that was in the modified list.
 | 
						|
					vdb_TransUsage transusg = new vdb_TransUsage(ps._curDirectory + "\\" + ps._Location + "\\tran.dbf");
 | 
						|
					DataSet trset = transusg.GetSortedByFromTrans("[FROMNUMBER] = \'"+this._Prcnum.Replace("'","''")+"\' AND [FROMSEQUEN] = \'" + dr["STEP"].ToString()[0] + "\'");
 | 
						|
					if (trset.Tables[0].Rows.Count!=0) 
 | 
						|
					{
 | 
						|
						foreach(DataRow adr in trset.Tables[0].Rows) CheckForUnusedDoc(al, ModLibDocs, ModROs, adr["TONUMBER"].ToString());
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		private void CheckForTransChange(string TransPtr, DataRow dr, ArrayList al)
 | 
						|
		{			
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) parentObj; 
 | 
						|
			// don't count internal transitions, i.e. transitions to myself
 | 
						|
			if (_Prcnum!=TransPtr)
 | 
						|
			{
 | 
						|
				// don't add if this is an outside transition.
 | 
						|
				string typ = dr["TYPE"].ToString();
 | 
						|
				if (typ=="6")return;
 | 
						|
				string OldToKey = dr["TONUMBER"].ToString().PadRight(20,' ') + dr["TOSEQUENCE"].ToString();
 | 
						|
				OldToKey = OldToKey.TrimEnd(" ".ToCharArray()); // needed extra trim if toseq is null (libdoc)
 | 
						|
				string tmp = dr["OLDTO"].ToString().TrimEnd(" ".ToCharArray());
 | 
						|
				if ((tmp!=null&&tmp!="") && (tmp!=OldToKey))
 | 
						|
				{
 | 
						|
					AppIndItem cur = InAppIndList(TransPtr,al);
 | 
						|
					AppTransConflict tc = new AppTransConflict(ds,dr["FROMNUMBER"].ToString(),dr["FROMSEQUEN"].ToString(),dr["TONUMBER"].ToString(),dr["TOSEQUENCE"].ToString(),dr["OLDTO"].ToString());
 | 
						|
					cur.AddConflict(tc);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		public bool CheckTransitionReferences(ArrayList al)
 | 
						|
		{
 | 
						|
			// first check transitions from this procedure...
 | 
						|
			VEO_DummySet pds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) pds.parentObj;
 | 
						|
			string pth = ps._curDirectory+"\\"+ps.Location+"\\tran.dbf";
 | 
						|
			vdb_TransUsage transusg = new vdb_TransUsage(pth);
 | 
						|
			DataSet ds = transusg.GetSortedByFromTrans("[FROMNUMBER] = \'"+this._Prcnum.Replace("'","''")+"\'");
 | 
						|
			foreach (DataRow dr in ds.Tables[0].Rows)
 | 
						|
			{
 | 
						|
				CheckForTransChange(dr["TONUMBER"].ToString(),dr,al);
 | 
						|
			}
 | 
						|
			ds.Clear();
 | 
						|
			ds = transusg.GetSortedByToTrans("[TONUMBER] = \'"+this._Prcnum.Replace("'","''")+"\'");
 | 
						|
			foreach (DataRow dr in ds.Tables[0].Rows)
 | 
						|
			{
 | 
						|
				CheckForTransChange(dr["FROMNUMBER"].ToString(),dr,al);
 | 
						|
			}
 | 
						|
			ds.Dispose();
 | 
						|
			transusg=null;
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		private void SetUpNewApFileName(string ApprovedPath)
 | 
						|
		{
 | 
						|
			int i=0;
 | 
						|
			StringBuilder newname = new StringBuilder();
 | 
						|
			if(!isOpen) Open();
 | 
						|
			while(i==0 || (File.Exists(ApprovedPath+"\\"+newname.ToString())))
 | 
						|
			{
 | 
						|
				newname.Remove(0,newname.Length);
 | 
						|
				newname.Append("PROC");
 | 
						|
				string tmp = i.ToString();
 | 
						|
				newname.Append(i.ToString("d3"));
 | 
						|
				newname.Append(".dbf");
 | 
						|
				i++;
 | 
						|
			}
 | 
						|
			this._Location = newname.ToString().Substring(0,7);
 | 
						|
		}
 | 
						|
 | 
						|
		public void GetApProcNumAndFile(string ApprovedPath, ref string ApProcFile, ref string ApProcNum)
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			vdb_Set vdbSet = new vdb_Set(ApprovedPath);
 | 
						|
 | 
						|
			// get the total number of records in the Approved Set file
 | 
						|
			// and see if this is a new procedure number. If it is a new number,
 | 
						|
			// (cause is either new procedure or modified procedure number), we
 | 
						|
			// need a new database file name & need to save in the ApProcNum the
 | 
						|
			// number that will
 | 
						|
			int TotalRecs = vdbSet.DB_Data.Tables[0].Rows.Count;
 | 
						|
			DataRow foundRow = null;
 | 
						|
			foreach (DataRow dr in vdbSet.DB_Data.Tables[0].Rows)
 | 
						|
			{
 | 
						|
				if (dr["NUMBER"].ToString()==this._Prcnum)
 | 
						|
				{
 | 
						|
					foundRow=dr;
 | 
						|
					break;
 | 
						|
				}
 | 
						|
			}		
 | 
						|
			ApProcNum = _Prcnum;
 | 
						|
			
 | 
						|
			// This procedure number is not in the approved set, get a new file name
 | 
						|
			// for it. Othewise, just return current filename.
 | 
						|
			if (foundRow == null) 
 | 
						|
			{
 | 
						|
				// save _Location temporarily, because setupnewfilename overwrites it.
 | 
						|
				string _Locationsav = _Location;
 | 
						|
				SetUpNewApFileName(ApprovedPath);
 | 
						|
				ApProcFile = _Location;
 | 
						|
				_Location = _Locationsav;
 | 
						|
			}
 | 
						|
			else
 | 
						|
				ApProcFile = foundRow["ENTRY"].ToString();
 | 
						|
		}
 | 
						|
 | 
						|
		public void UpdateSetFile(string ApprovedPath, string ApProcNum, string ApProcFile)
 | 
						|
		{
 | 
						|
			string appath=ApprovedPath+"\\set.dbf";
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			vdb_Set vdbSet = new vdb_Set(appath);
 | 
						|
			DataRow foundRow = null;
 | 
						|
			DataRow recidrow = null;
 | 
						|
			string tmprecid = null;
 | 
						|
 | 
						|
			if (ApProcNum == this._Prcnum)
 | 
						|
			{
 | 
						|
				// get the total number of records in the Approved Set file
 | 
						|
				// and see if this is a new procedure number. If so add it,
 | 
						|
				// otherwise we have a modify. 
 | 
						|
				int TotalRecs = vdbSet.DB_Data.Tables[0].Rows.Count;
 | 
						|
				foreach (DataRow dr in vdbSet.DB_Data.Tables[0].Rows)
 | 
						|
				{
 | 
						|
					if (dr["NUMBER"].ToString()==this._Prcnum)
 | 
						|
					{
 | 
						|
						foundRow=dr;
 | 
						|
						break;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			// new procedure, add it.
 | 
						|
			if (foundRow==null)
 | 
						|
			{
 | 
						|
				DataTable tbl = vdbSet.DB_Data.Tables[0];
 | 
						|
				DataRow newdr = tbl.NewRow();
 | 
						|
				foundRow=newdr;
 | 
						|
				tbl.Rows.Add(foundRow);
 | 
						|
				ApProcNum=null;
 | 
						|
				// update the recid
 | 
						|
				recidrow = tbl.Rows[0];
 | 
						|
				tmprecid = recidrow["RECID"].ToString();
 | 
						|
				int irecid = System.Convert.ToInt32(tmprecid.Substring(2,6));
 | 
						|
				irecid++;
 | 
						|
				tmprecid = tmprecid.Substring(0,2)+irecid.ToString("d6");
 | 
						|
				recidrow["RECID"]=tmprecid;
 | 
						|
				foundRow["RECID"]=tmprecid;
 | 
						|
			}
 | 
						|
 | 
						|
			// update the approved set file record with the date/time/init information, long
 | 
						|
			// proc title data, and number/entry/etc.
 | 
						|
			foundRow["DATE"] = pdatarow["DATE"];
 | 
						|
			foundRow["TIME"] = pdatarow["TIME"];
 | 
						|
			foundRow["INITIALS"] = pdatarow["INITIALS"];
 | 
						|
 | 
						|
			int ptlength = ps.UseLongProcTitles?249:78;
 | 
						|
			foundRow["TITLE"] = _Title.Substring(0,_Title.Length>ptlength?ptlength:_Title.Length);
 | 
						|
			foundRow["NUMBER"] = _Prcnum;
 | 
						|
			foundRow["ENTRY"]= _Location==ApProcFile?_Location:ApProcFile;
 | 
						|
 | 
						|
			foundRow["FORMAT"] = pdatarow["FORMAT"];  // if modified, pdatarow has current
 | 
						|
			foundRow["PROCCODE"] = _ProcCode;
 | 
						|
 | 
						|
			// if removing change bars, update the working draft date/time stamp
 | 
						|
			// for this procedure.
 | 
						|
			if (ps.RmChgBarOnApp) 
 | 
						|
			{
 | 
						|
				ps.UpdateSetDTI(false,pdatarow);
 | 
						|
				ds.vdbSet.DB_Data = pdatarow.Table.DataSet;
 | 
						|
			}
 | 
						|
			
 | 
						|
			vdbSet.DB_Data = foundRow.Table.DataSet;  // write it out
 | 
						|
 | 
						|
			// now make sure we update the largestnumber data in the set header
 | 
						|
			
 | 
						|
			recidrow = pdatarow.Table.Rows[0];
 | 
						|
			string tmplarge = recidrow["NUMBER"].ToString();
 | 
						|
			if (tmplarge == null || tmplarge == "") tmplarge = "00000000";
 | 
						|
			bool update=false;
 | 
						|
			if (ds.LargestNumber != System.Convert.ToInt32(tmplarge.Substring(0,2)))
 | 
						|
			{
 | 
						|
				update=true;
 | 
						|
				tmplarge = ds.LargestNumber.ToString("d2").PadLeft(2,'0') + tmplarge.Substring(2,tmplarge.Length-2);
 | 
						|
			}
 | 
						|
			if (ds.LargestNumberForMenu != System.Convert.ToInt32(tmplarge.Substring(3,2)))
 | 
						|
			{
 | 
						|
				update = true;
 | 
						|
				tmplarge = tmplarge.Substring(0,3) + ds.LargestNumberForMenu.ToString("d2").PadLeft(2,'0') + tmplarge.Substring(5,tmplarge.Length-5);
 | 
						|
			}
 | 
						|
			if (ds.LargestTitleForMenu != System.Convert.ToInt32(tmplarge.Substring(6,2)))
 | 
						|
			{
 | 
						|
				update = true;
 | 
						|
				tmplarge = tmplarge.Substring(0,6) + ds.LargestTitleForMenu.ToString("d2").PadLeft(2,'0');
 | 
						|
			}
 | 
						|
			if (update)
 | 
						|
			{
 | 
						|
				recidrow["NUMBER"] = tmplarge;
 | 
						|
				vdbSet.DB_Data = recidrow.Table.DataSet;  // write it out
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// pass in approved path & approved procedure number, i.e. original procedure
 | 
						|
		// number - if the proc number is modified, this stores original otherwise
 | 
						|
		// it is the current proc number. (if this is a new procedure then ApProcNum=null.
 | 
						|
		public void FixTransitionReferences(string ApprovedPath, string ApProcNum)
 | 
						|
		{
 | 
						|
			string appath=ApprovedPath+"\\tran.dbf";
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			try
 | 
						|
			{
 | 
						|
				vdb_TransUsage atransusg = new vdb_TransUsage(appath);
 | 
						|
				// if this procedure existed before this approval, then remove transitions-from
 | 
						|
				// approved version (they'll be added back later). 
 | 
						|
				if (ApProcNum != null)
 | 
						|
				{				
 | 
						|
					DataSet adset = atransusg.GetSortedByFromTrans("[FROMNUMBER] = \'"+ApProcNum.Replace("'","''")+"\'");
 | 
						|
					int ndr = adset.Tables[0].Rows.Count;
 | 
						|
					if (ndr > 0)
 | 
						|
					{
 | 
						|
						int errs = atransusg.DeleteSelected("[FROMNUMBER] = \'"+ApProcNum.Replace("'","''")+"\'");
 | 
						|
						if (errs>0)
 | 
						|
						{
 | 
						|
							MessageBox.Show("Error resolving transition records");
 | 
						|
							return;
 | 
						|
						}
 | 
						|
						atransusg.Pack();
 | 
						|
					}
 | 
						|
 | 
						|
					// if there was a change in procedure number, then update the transitions-to in
 | 
						|
					// the approved version.
 | 
						|
					if (ApProcNum!=_Prcnum)
 | 
						|
					{
 | 
						|
						adset.Clear();
 | 
						|
						adset = atransusg.GetSortedByToTrans("[TONUMBER] = \'"+ApProcNum.Replace("'","''")+"\'");
 | 
						|
						ndr = adset.Tables[0].Rows.Count;
 | 
						|
						foreach (DataRow dr in adset.Tables[0].Rows) dr["TONUMBER"]=_Prcnum;
 | 
						|
						if (ndr>0) atransusg.DB_Data = adset.Tables[0].DataSet;
 | 
						|
					}
 | 
						|
					adset.Clear();
 | 
						|
					adset=null;
 | 
						|
				}
 | 
						|
 | 
						|
				// now update the approved transitions from data based on data in the working
 | 
						|
				// draft.
 | 
						|
				vdb_TransUsage transusg = new vdb_TransUsage(ps._curDirectory+"\\"+ps.Location+"\\tran.dbf");
 | 
						|
				DataSet wdset = transusg.GetSortedByFromTrans("[FROMNUMBER] = \'"+_Prcnum.Replace("'","''")+"\'");
 | 
						|
				if (wdset.Tables[0].Rows.Count>0)
 | 
						|
				{
 | 
						|
					int errs = transusg.InsertInto(ps._curDirectory+"\\"+ps.Location+"\\"+appath,"[FROMNUMBER] = \'"+_Prcnum.Replace("'","''")+"\'");
 | 
						|
					if (errs>0)
 | 
						|
					{
 | 
						|
						MessageBox.Show("Error resolving transition records");
 | 
						|
						return;
 | 
						|
					}	
 | 
						|
 | 
						|
					// Now update the working draft 'OLDTO' field to contain the current
 | 
						|
					// working draft 'TONUMBER'+'TOSEQUENCE' fields.
 | 
						|
					StringBuilder qry = new StringBuilder();
 | 
						|
					qry.Append("UPDATE TRAN SET TRAN.OLDTO = [TONUMBER] & Space(20-Len([TONUMBER])) & [TOSEQUENCE] & Space(12-Len([TOSEQUENCE])) ");
 | 
						|
					qry.Append("WHERE (tran.FROMNUMBER=\'");
 | 
						|
					qry.Append(_Prcnum.Replace("'","''"));
 | 
						|
					qry.Append("\' AND tran.TOSEQUENCE IS NOT NULL)");
 | 
						|
 | 
						|
					// This one handles the libdocs (their TOSEQUENCE is null).
 | 
						|
					bool success  = transusg.UpdateUsing(qry.ToString());
 | 
						|
					if (!success) MessageBox.Show("Error When Updating Transition history");
 | 
						|
					qry.Length=0;
 | 
						|
					qry.Append("UPDATE TRAN SET TRAN.OLDTO = [TONUMBER] & Space(20-Len([TONUMBER])+12) ");
 | 
						|
					qry.Append("WHERE (tran.FROMNUMBER=\'");
 | 
						|
					qry.Append(_Prcnum.Replace("'","''"));
 | 
						|
					qry.Append("\' AND tran.TOSEQUENCE IS NULL)");
 | 
						|
					success  = transusg.UpdateUsing(qry.ToString());
 | 
						|
					if (!success) MessageBox.Show("Error When Updating Transition history");
 | 
						|
				}
 | 
						|
				wdset.Dispose();
 | 
						|
				transusg=null;
 | 
						|
				atransusg=null;
 | 
						|
			}
 | 
						|
			catch (Exception e)
 | 
						|
			{
 | 
						|
				MessageBox.Show("Could not approve transition usages for " + _Prcnum + ", "+e.Message);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		
 | 
						|
#if Upgrade2005_Print
 | 
						|
#else
 | 
						|
		public override void AddToTree(TreeNode parentnd)
 | 
						|
		{
 | 
						|
		}
 | 
						|
		public override bool Expand(TreeNode parentnd)
 | 
						|
		{	
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
#endif
 | 
						|
		public override bool mnuAllowUpdRO()
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			if (ps.isApproved||ps.IsEmpty||ps.isTempChange) return false;
 | 
						|
			return (amILockedByMe());
 | 
						|
		}
 | 
						|
		
 | 
						|
		public override bool mnuAllowClean()
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			if (ps.isApproved||ps.IsEmpty) return false;
 | 
						|
			if (amILockedByMe()==false) return false;
 | 
						|
			if ((ps.accessFlags&Security.CLEAN)==Security.CLEAN) return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowDataCheck()
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			if (ps.isApproved||ps.IsEmpty) return false;
 | 
						|
			if (amILockedByMe()==false) return false;
 | 
						|
			if ((ps.accessFlags&Security.CLEAN)==Security.CLEAN) return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowChgDef()
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			if (ps.IsEmpty) return false;
 | 
						|
			return(amILockedByMe());
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowNew()
 | 
						|
		{
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowApprove()
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			if (amILockedByMe()==false) return false;
 | 
						|
			if ((ps.isApproved == false) && (ps.isTempChange==false)) return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowApproveSel()
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			if (ps.isApproved || ps.IsEmpty || ps.isTempChange) return false;
 | 
						|
			if (amILockedByMe()==false) return false;
 | 
						|
			if (ps.isSetApproved && ((ps.accessFlags&Security.APPROVESINGLE)==Security.APPROVESINGLE)) return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowApproveAll()
 | 
						|
		{
 | 
						|
			bool allowit=false;
 | 
						|
			bool allowonlyonce=false;
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			if (ps.isApproved || ps.IsEmpty || ps.isTempChange) return false;  // cannot approve an approved set
 | 
						|
			if (amILockedByMe()==false) return false;
 | 
						|
			if ((ps.accessFlags&Security.APPROVE)==Security.APPROVE) allowit = true;
 | 
						|
			// also check if there is a serial number option which allows only one
 | 
						|
			// approve-all, i.e. if an approved version exists, cannot approve all.
 | 
						|
			if (usrRunTime.SerialNumber.GetSNOption((uint)Utils.SerialNo.SN_Flags.SN_ONLYAPPROVEONCE_ON)>0)
 | 
						|
				allowonlyonce=true;
 | 
						|
			if (allowonlyonce && ps.isSetApproved) return false;
 | 
						|
			if (allowit) return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		// the following method is used by various other methods to determine whether modifications
 | 
						|
		// can be made to the procedure.
 | 
						|
		private bool AllowMods()
 | 
						|
		{
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			if (ps.isApproved == true) return false;
 | 
						|
			if (amILockedByMe()==false) return false;
 | 
						|
// Right now we are allowing the slave's procedure number and title be changed
 | 
						|
// - but it will be wiped out when/if the master's set file changes.
 | 
						|
// - If we want to NOT allow changes to the slave's procedure number and title
 | 
						|
//   then uncomment the following line. - jsj 04/08/05
 | 
						|
//			if (ps._ProcType == ProcTypeOptions.Slave) return false;
 | 
						|
			if ((ps.accessFlags&Security.ADDMODDEL)==Security.ADDMODDEL) return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
		public override bool mnuAllowDelete()
 | 
						|
		{
 | 
						|
			return AllowMods();
 | 
						|
		}
 | 
						|
		public override bool canEdit()
 | 
						|
		{
 | 
						|
			return AllowMods();
 | 
						|
		}
 | 
						|
 | 
						|
		// determine whether drag/drop can occur.
 | 
						|
		public override bool canDoDragDrop()
 | 
						|
		{
 | 
						|
			// allow user to change order in approved set list
 | 
						|
			//			return AllowMods();    
 | 
						|
			VEO_DummySet ds = (VEO_DummySet) this.parentObj;
 | 
						|
			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
			if (amILockedByMe()==false) return false;
 | 
						|
			if (ps._ProcType == ProcTypeOptions.Slave) return false;
 | 
						|
			if ((ps.accessFlags&Security.ADDMODDEL)==Security.ADDMODDEL) return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |