Added code to ResetProcedures in Working Draft after they are moved.
Added logic to use SQL Stored Procedure to move Procedures, Sections or Steps
This commit is contained in:
		| @@ -369,6 +369,13 @@ namespace VEPROMS.CSLA.Library | ||||
| 		{ | ||||
| 			_Procedures = null; | ||||
| 		} | ||||
| 		public static void ResetProcedures(int versionID) | ||||
| 		{ | ||||
| 			string key = versionID.ToString(); | ||||
| 			if (_CacheByPrimaryKey.ContainsKey(key)) | ||||
| 				foreach (DocVersionInfo dvi in _CacheByPrimaryKey[key]) | ||||
| 					dvi.ResetProcedures(); | ||||
| 		} | ||||
| 		#region IVEReadOnlyItem | ||||
| 		public System.Collections.IList GetChildren() | ||||
| 		{ | ||||
|   | ||||
| @@ -129,7 +129,7 @@ namespace VEPROMS.CSLA.Library | ||||
| 				children = (IList<ItemInfo>)parentInfoDV.GetChildren(); | ||||
| 			int numChild = children.Count; | ||||
|  | ||||
| 			if (this.MyPrevious == null) wasfirstchild = true; | ||||
| 			if (this.PreviousID == null) wasfirstchild = true;//Use PreviousID rather than MyPrevious so the item is not cached | ||||
| 			Item origNextItem = null; | ||||
|  | ||||
| 			// First, remove from this item from its list.  To do this, get the current item's next point and redirect it's myprevious | ||||
| @@ -166,12 +166,15 @@ namespace VEPROMS.CSLA.Library | ||||
| 					Save(); | ||||
| 				} | ||||
| 			} | ||||
|       // RHM Moving Change | ||||
| 			//else | ||||
| 			//{ | ||||
| 			//		MyPrevious = null; | ||||
| 			//		Save(); | ||||
| 			//} | ||||
| 			else// RHM 2/20/2013 Moving Change | ||||
| 			{ | ||||
| 				MyPrevious = null; | ||||
| 				// Console.WriteLine(">Setting MyPrevious Null {0}", ItemID); | ||||
| 				Save(); | ||||
| 				// Console.WriteLine("'Moved','e{0}','u{1}','{2}',{3}", ItemID, _MyItemUnique, StringIt(_LastChanged), index); | ||||
| 				ItemInfo.RefreshParent(this, parentInfo); | ||||
| 				//Console.WriteLine("<Setting MyPrevious Null {0}", ItemID); | ||||
| 			} | ||||
| 			// newPreviousInfo == null if moving into first child, and wasfirstchild == true if moving out of first child. | ||||
| 			// This will require adjusting the DocVersion to point to the correct first child if a procedure is moved. | ||||
| 			if (newPreviousInfo == null || wasfirstchild) | ||||
| @@ -216,11 +219,29 @@ namespace VEPROMS.CSLA.Library | ||||
| 				if (origNextItem != null) origNextItem.Dispose(); | ||||
| 				if (parentInfo != null) | ||||
| 					parentInfo.MyContent.RefreshContentParts(); | ||||
| 				if (parentInfoDV != null) | ||||
| 					parentInfoDV.ResetProcedures(); | ||||
| 			} | ||||
|  | ||||
| 			//ShowItemAndSections("After MoveItem", pInfo as ItemInfo); | ||||
| 			if (parentInfoDV != null) | ||||
| 				DocVersionInfo.ResetProcedures(parentInfoDV.VersionID); | ||||
| 			if (parentInfo != null)  | ||||
| 				ItemInfo.ResetParts(parentInfo.ItemID); | ||||
| 			//ShowItemAndSections("After Refresh", pInfo as ItemInfo); | ||||
| 		} | ||||
| 		//private static string StringIt(byte[] _LastChanged) | ||||
| 		//{ | ||||
| 		//	StringBuilder sb = new StringBuilder(); | ||||
| 		//	for (int i = 0; i < _LastChanged.Length; i++) | ||||
| 		//		sb.Append(string.Format("{0:X2}",_LastChanged[i])); | ||||
| 		//	return sb.ToString(); | ||||
| 		//} | ||||
| 		//private void ShowItemAndSections(string title, ItemInfo pinfo) | ||||
| 		//{ | ||||
| // | ||||
| 		//	pinfo.ShowThis(title + "-Parent"); | ||||
| 		//	int i=0; | ||||
| 		//	foreach (ItemInfo child in pinfo.Sections) | ||||
| 		//		child.ShowThis(title + string.Format("-Child {0}", ++i)); | ||||
| 		//} | ||||
| 		protected static int MakeNewItem(IVEDrillDownReadOnly parentInfoDD, ItemInfo previousInfo, string number, string title, int type, E_FromType partType) | ||||
| 		{ | ||||
| 			int newitemid = 0; | ||||
| @@ -303,6 +324,68 @@ namespace VEPROMS.CSLA.Library | ||||
| 	#region ItemInfo | ||||
| 	public partial class ItemInfo:IVEDrillDownReadOnly | ||||
| 	{ | ||||
| 		public void MoveItem(IVEDrillDownReadOnly pInfo, int index) | ||||
| 		{ | ||||
| 			using (ItemInfoList movedItems = ItemInfoList.GetMoveItem(ItemID, index)) | ||||
| 			{ | ||||
| 				foreach (ItemInfo itm in movedItems) | ||||
| 					ItemInfo.Refresh(itm); | ||||
| 			} | ||||
| 			DocVersionInfo parentInfoDV = pInfo as DocVersionInfo; | ||||
| 			if (parentInfoDV != null) | ||||
| 				DocVersionInfo.ResetProcedures(parentInfoDV.VersionID); | ||||
| 			ItemInfo parentInfo = pInfo as ItemInfo; | ||||
| 			if (parentInfo != null) | ||||
| 				ItemInfo.ResetParts(parentInfo.ItemID); | ||||
| 		} | ||||
| 		public static void Refresh(ItemInfo tmp) | ||||
| 		{ | ||||
| 			string key = tmp.ItemID.ToString(); | ||||
| 			ConvertListToDictionary(); | ||||
| 			if (_CacheByPrimaryKey.ContainsKey(key)) | ||||
| 				foreach (ItemInfo tmpInfo in _CacheByPrimaryKey[key]) | ||||
| 					tmpInfo.RefreshFields(tmp); | ||||
| 		} | ||||
| 		protected virtual void RefreshFields(ItemInfo tmp) | ||||
| 		{ | ||||
| 			if (_PreviousID != tmp.PreviousID) | ||||
| 			{ | ||||
| 				if (MyPrevious != null) MyPrevious.RefreshNextItems(); // Update List for old value | ||||
| 				_PreviousID = tmp.PreviousID; // Update the value | ||||
| 			} | ||||
| 			_MyPrevious = null; // Reset list so that the next line gets a new list | ||||
| 			if (MyPrevious != null) MyPrevious.RefreshNextItems(); // Update List for new value | ||||
| 			//if (_ContentID != tmp.ContentID) | ||||
| 			//{ | ||||
| 			if (MyContent != null) MyContent.RefreshContentItems(); // Update List for old value | ||||
| 			_ContentID = tmp.ContentID; // Update the value | ||||
| 			//} | ||||
| 			_MyContent = null; // Reset list so that the next line gets a new list | ||||
| 			if (MyContent != null) MyContent.RefreshContentItems(); // Update List for new value | ||||
| 			_DTS = tmp.DTS; | ||||
| 			_UserID = tmp.UserID; | ||||
| 			_ItemInfoExtension.Refresh(this); | ||||
| 			OnChange();// raise an event | ||||
| 		} | ||||
|  | ||||
| 		private bool _Moving = false; | ||||
| 		public bool Moving | ||||
| 		{ | ||||
| 			get { return _Moving; } | ||||
| 			set { _Moving = value; } | ||||
| 		} | ||||
| 		public static void RefreshParent(Item tmp,ItemInfo pInfo) | ||||
| 		{ | ||||
| 			string key = tmp.ItemID.ToString(); | ||||
| 			ConvertListToDictionary(); | ||||
| 			if (_CacheByPrimaryKey.ContainsKey(key)) | ||||
| 				foreach (ItemInfo tmpInfo in _CacheByPrimaryKey[key]) | ||||
| 				{ | ||||
| 					tmpInfo._ActiveParent=pInfo; | ||||
| 					tmpInfo.RefreshItemParts(); | ||||
| 				} | ||||
| 		} | ||||
|  | ||||
| 		private bool _NewTransToUnNumberedItem = false; | ||||
| 		public bool NewTransToUnNumberedItem | ||||
| 		{ | ||||
| @@ -1530,9 +1613,36 @@ namespace VEPROMS.CSLA.Library | ||||
| 			retval = Regex.Replace(retval, @"\\'[0-9A-Fa-f][0-9A-Fa-f]", new MatchEvaluator(ReplaceSpecialHexCharacter)); | ||||
| 			return retval; | ||||
| 		} | ||||
|  | ||||
| 		//public void ShowThis(string title) | ||||
| 		//{ | ||||
| 		//	Console.WriteLine("'{0}',,,,'i{1}','u{2}',{3},'{4}','{5}','{6}','{7}'", title, ItemID, MyItemInfoUnique, PreviousID, this, _MyPrevious, _MyParent, _ActiveParent); | ||||
| 		//} | ||||
| 		public VE_Font GetItemFont() | ||||
| 		{ | ||||
| 			/* | ||||
| 			FormatInfo fmt = ActiveFormat; | ||||
| 			if (fmt == null) | ||||
| 			{ | ||||
| 				ShowThis(); | ||||
| 				if (MyPrevious != null) | ||||
| 				{ | ||||
| 					MyPrevious.ShowThis(); | ||||
| 					if (MyPrevious.ActiveFormat == null) | ||||
| 					{ | ||||
| 						_ActiveParent = MyPrevious.MyParent; | ||||
| 						MyPrevious._ActiveParent = _ActiveParent; | ||||
| 						fmt = _ActiveParent.ActiveFormat; | ||||
| 						MyPrevious._ActiveFormat = fmt; | ||||
| 						Console.WriteLine("OOPS!"); | ||||
| 					} | ||||
| 					else if (MyParent != null) | ||||
| 					{ | ||||
| 						_ActiveParent = MyParent; | ||||
| 						fmt = _ActiveParent.ActiveFormat; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			*/ | ||||
| 			return GetItemFont(ActiveFormat); | ||||
| 		} | ||||
|  | ||||
| @@ -2027,7 +2137,7 @@ namespace VEPROMS.CSLA.Library | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				return _ActiveParent==this ? null : _ActiveParent; | ||||
| 				return _ActiveParent == this ? null : _ActiveParent; | ||||
| 			} | ||||
| 			internal set | ||||
| 			//set | ||||
| @@ -2075,8 +2185,8 @@ namespace VEPROMS.CSLA.Library | ||||
| 					int subtyp = typ % 10000; | ||||
| 					if (subtyp >= ActiveFormat.PlantFormat.DocStyles.DocStyleList.Count) return ActiveFormat.PlantFormat.DocStyles.DocStyleList[0]; | ||||
| 					_MyDocStyle = ActiveFormat.PlantFormat.DocStyles.DocStyleList[subtyp]; | ||||
| 				} | ||||
| 				return _MyDocStyle; | ||||
| 						} | ||||
| 					return _MyDocStyle; | ||||
| 			} | ||||
| 			set | ||||
| 			{ | ||||
| @@ -3023,6 +3133,19 @@ namespace VEPROMS.CSLA.Library | ||||
| 		{ | ||||
| 			AddItem(itemInfo); | ||||
| 		} | ||||
| 		public static ItemInfoList GetMoveItem(int? itemID, int index) | ||||
| 		{ | ||||
| 			try | ||||
| 			{ | ||||
| 				ItemInfoList tmp = DataPortal.Fetch<ItemInfoList>(new MoveItemCriteria(itemID, index)); | ||||
| 				return tmp; | ||||
| 			} | ||||
| 			catch (Exception ex) | ||||
| 			{ | ||||
| 				throw new DbCslaException("Error on ItemInfoList.GetChildren", ex); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		public static ItemInfoList GetList(int? itemID,int type) | ||||
| 		{ | ||||
| 			try | ||||
| @@ -3092,6 +3215,27 @@ namespace VEPROMS.CSLA.Library | ||||
| 			} | ||||
| 		} | ||||
| 		[Serializable()] | ||||
| 		private class MoveItemCriteria | ||||
| 		{ | ||||
| 			public MoveItemCriteria(int? itemID, int index) | ||||
| 			{ | ||||
| 				_ItemID = itemID; | ||||
| 				_Index = index; | ||||
| 			} | ||||
| 			private int? _ItemID; | ||||
| 			public int? ItemID | ||||
| 			{ | ||||
| 				get { return _ItemID; } | ||||
| 				set { _ItemID = value; } | ||||
| 			} | ||||
| 			private int _Index; | ||||
| 			public int Index | ||||
| 			{ | ||||
| 				get { return _Index; } | ||||
| 				set { _Index = value; } | ||||
| 			} | ||||
| 		} | ||||
| 		[Serializable()] | ||||
| 		private class ItemListCriteria | ||||
| 		{ | ||||
| 			public ItemListCriteria(int? itemID,int type) | ||||
| @@ -3134,6 +3278,52 @@ namespace VEPROMS.CSLA.Library | ||||
| 				set { _Type = value; } | ||||
| 			} | ||||
| 		} | ||||
| 		private void DataPortal_Fetch(MoveItemCriteria criteria) | ||||
| 		{ | ||||
| 			this.RaiseListChangedEvents = false; | ||||
| 			try | ||||
| 			{ | ||||
| 				using (SqlConnection cn = Database.VEPROMS_SqlConnection) | ||||
| 				{ | ||||
| 					using (SqlCommand cm = cn.CreateCommand()) | ||||
| 					{ | ||||
| 						cm.CommandType = CommandType.StoredProcedure; | ||||
| 						cm.CommandText = "MoveItem"; | ||||
| 						cm.Parameters.AddWithValue("@ItemID", criteria.ItemID); | ||||
| 						cm.Parameters.AddWithValue("@Index", criteria.Index); | ||||
| 						cm.CommandTimeout = Database.DefaultTimeout; | ||||
| 						using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) | ||||
| 						{ | ||||
| 							while (dr.Read()) | ||||
| 							{ | ||||
| 								ItemInfo itemInfo = new ItemInfo(dr); | ||||
| 								//switch ((E_FromType)criteria.Type) | ||||
| 								//{ | ||||
| 								//  case E_FromType.Procedure: | ||||
| 								//    itemInfo = new ProcedureInfo(dr); | ||||
| 								//    break; | ||||
| 								//  case E_FromType.Section: | ||||
| 								//    itemInfo = new SectionInfo(dr); | ||||
| 								//    break; | ||||
| 								//  default: | ||||
| 								//    itemInfo = new StepInfo(dr); | ||||
| 								//    break; | ||||
| 								//} | ||||
| 								IsReadOnly = false; | ||||
| 								this.Add(itemInfo); | ||||
| 								IsReadOnly = true; | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			catch (Exception ex) | ||||
| 			{ | ||||
| 				Database.LogException("ItemInfoList.DataPortal_Fetch", ex); | ||||
| 				throw new DbCslaException("ItemInfoList.DataPortal_Fetch", ex); | ||||
| 			} | ||||
| 			this.RaiseListChangedEvents = true; | ||||
| 		} | ||||
| 		private void DataPortal_Fetch(ItemListCriteria criteria) | ||||
| 		{ | ||||
| 			this.RaiseListChangedEvents = false; | ||||
| @@ -3942,10 +4132,11 @@ namespace VEPROMS.CSLA.Library | ||||
| 		} | ||||
| 		public void MoveProcedure(IVEDrillDownReadOnly pInfo, int index) | ||||
| 		{ | ||||
| 			using (Item ii = Item.Get(this.ItemID)) | ||||
| 			{ | ||||
| 				ii.MoveItem(pInfo, index); | ||||
| 			} | ||||
| 			MoveItem(pInfo, index); | ||||
| 			//using (Item ii = Item.Get(this.ItemID)) | ||||
| 			//{ | ||||
| 			//  ii.MoveItem(pInfo, index); | ||||
| 			//} | ||||
| 		} | ||||
| 		public new Procedure Get() | ||||
| 		{ | ||||
| @@ -4377,10 +4568,11 @@ namespace VEPROMS.CSLA.Library | ||||
| 		} | ||||
| 		public void MoveSection(IVEDrillDownReadOnly pInfo, int index) | ||||
| 		{ | ||||
| 			using (Item ii = Item.Get(this.ItemID)) | ||||
| 			{ | ||||
| 				ii.MoveItem(pInfo, index); | ||||
| 			} | ||||
| 			MoveItem(pInfo, index); | ||||
| 			//using (Item ii = Item.Get(this.ItemID)) | ||||
| 			//{ | ||||
| 			//  ii.MoveItem(pInfo, index); | ||||
| 			//} | ||||
| 		} | ||||
| 		public new Section Get() | ||||
| 		{ | ||||
| @@ -4519,10 +4711,11 @@ namespace VEPROMS.CSLA.Library | ||||
| 		} | ||||
| 		public void MoveStep(IVEDrillDownReadOnly pInfo, int index) | ||||
| 		{ | ||||
| 			using (Item ii = Item.Get(this.ItemID)) | ||||
| 			{ | ||||
| 				ii.MoveItem(pInfo, index); | ||||
| 			} | ||||
| 			MoveItem(pInfo, index); | ||||
| 			//using (Item ii = Item.Get(this.ItemID)) | ||||
| 			//{ | ||||
| 			//  ii.MoveItem(pInfo, index); | ||||
| 			//} | ||||
| 		} | ||||
| 		public new Step Get() | ||||
| 		{ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Rich
					Rich