From 17575c0f698edc66e2cceebd13ca590339ff4c1f Mon Sep 17 00:00:00 2001 From: Kathy Date: Tue, 1 Sep 2009 14:28:22 +0000 Subject: [PATCH] --- .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 82 +++++++++++++ .../Extension/ROFSTExt.cs | 46 +++++++- .../Extension/ROUsagesExt.cs | 110 ++++++++++++++++++ .../Extension/TransitionExt.cs | 2 +- 4 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 PROMS/VEPROMS.CSLA.Library/Extension/ROUsagesExt.cs diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index d971451d..ebd235e4 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -515,6 +515,11 @@ namespace VEPROMS.CSLA.Library { int stepType = ((int)MyContent.Type) % 10000; StepDataList sdlist = ActiveFormat.PlantFormat.FormatData.StepDataList; + if (stepType > sdlist.Count) + { + Console.WriteLine("Error getting type - contentid = {0}", MyContent.ContentID); + return false; + } StepData sd = sdlist[stepType]; while (sd.Index != 0) { @@ -897,6 +902,60 @@ namespace VEPROMS.CSLA.Library { get { return _SearchAnnotationType; } } + private ProcedureConfig _ProcedureConfig = null; + public ProcedureConfig.PrintChangeBar PrintChangeBar + { + get + { + if (_ProcedureConfig == null) SetProcedureConfig(); + return _ProcedureConfig.Print_ChangeBar; + } + } + public ProcedureConfig.PrintChangeBarLoc PrintChangeBarLoc + { + get + { + if (_ProcedureConfig == null) SetProcedureConfig(); + return _ProcedureConfig.Print_ChangeBarLoc; + } + } + public ProcedureConfig.PrintChangeBarText PrintChangeBarText + { + get + { + if (_ProcedureConfig == null) SetProcedureConfig(); + return _ProcedureConfig.Print_ChangeBarText; + } + } + public string PrintChangeBarUsrMsg1 + { + get + { + if (_ProcedureConfig == null) SetProcedureConfig(); + return _ProcedureConfig.Print_UserCBMess1; + } + } + public string PrintChangeBarUsrMsg2 + { + get + { + if (_ProcedureConfig == null) SetProcedureConfig(); + return _ProcedureConfig.Print_UserCBMess2; + } + } + private void SetProcedureConfig() + { + // Walk up tree until find my procedure. Then get its change bar (default will + // get inherited information if not set at this level). + // Find the procedure level and its config. + ItemInfo tmpitm = this; + while (tmpitm.MyContent.Type != 0) + tmpitm = tmpitm.MyParent; + + ProcedureInfo pi = ProcedureInfo.Get(tmpitm.ItemID); + if (pi == null) return; + _ProcedureConfig = pi.MyConfig as ProcedureConfig; + } public string DisplayText { get { return ConvertToDisplayText(MyContent.Text); } @@ -1128,6 +1187,29 @@ namespace VEPROMS.CSLA.Library return DisplayText.Replace("\u2011", "-").Split(" ,.;:-_".ToCharArray())[0]+ "..."; } } + #region Change Bar + public bool HasChangeBar() + { + if (this.IsAccPages || this.IsProcedure || this.IsSection) return false; + StepInfo si = this as StepInfo; + if (si == null) return false; + StepConfig sc = si.MyConfig as StepConfig; + if (sc == null) return false; + // if there is no override & return whether there was a change to the text. + if (sc.Step_CBOverride == null) + return (DTS > MyProcedure.DTS); + else // override is on: + { + // If the date time stamp says that text was changed so a change bar should exist, + // check override to see how change bar controls are set. The override flag can + // be either On or Off. + if (DTS > MyProcedure.DTS) + return (sc.Step_CBOverride == "On"); + else + return (sc.Step_CBOverride == "Off"); + } + } + #endregion #region IVEReadOnlyItem PartInfoList _PartInfoList; public System.Collections.IList GetChildren() diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs index 75d3562a..e9878c91 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs @@ -48,7 +48,11 @@ namespace VEPROMS.CSLA.Library { get { - if (_docVer == null) _docVer = DocVersion.Get(this.ROFstAssociations[0].MyDocVersion.VersionID); + if (_docVer == null) + { + if (ROFstAssociations.Count == 0) return null; + _docVer = DocVersion.Get(this.ROFstAssociations[0].MyDocVersion.VersionID); + } return _docVer; } set @@ -161,7 +165,7 @@ namespace VEPROMS.CSLA.Library /// the current one. /// /// ROFst: Returns the created rofst object - public static ROFst UpdateRoFst(RODbInfo rdi, DocVersionAssociation dva, DocVersion docver) + public static ROFst UpdateRoFst(RODbInfo rdi, DocVersionAssociation dva, DocVersion docver, ROFstInfo origROFst) { // file validity checks are done before getting here - just do the import // here. @@ -200,9 +204,47 @@ namespace VEPROMS.CSLA.Library } } } + // Now update the usages: compare old to new rofsts and update usages accordingly, i.e. modified + // values, deleted ros, etc. + UpdateROValuesText(origROFst, rofst); return rofst; } } + private static void UpdateROValuesText(ROFstInfo origROFstInfo, ROFst newROFst) + { + ROFSTLookup origLU = new ROFSTLookup(origROFstInfo); + ROFSTLookup newLU = new ROFSTLookup(newROFst); + List delList = new List(); + List chgList = newLU.GetValueDifferences(origLU, ref delList); + + foreach (string chg in chgList) + { + string newvalue = newLU.GetRoValue(chg); + string desc = string.Format("Change in RO Values: Old value = {0}, New value = {1}", origLU.GetRoValue(chg), newvalue); + // roid's are stored in database as 16 characters long in the rousages table. They may be stored + // as 12 characters in the ro.fst. + string padroid = chg.Length <= 12 ? chg + "0000" : chg; + RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed"); + foreach (RoUsageInfo roUsg in affected) + { + using (Content content = Content.Get(roUsg.MyContent.ContentID)) + { + content.FixContentText(roUsg, newvalue); + if (content.IsDirty) + content.Save(); + } + } + } + foreach (string del in delList) + { + Console.WriteLine("Deleted ROID = {0}", del); + string desc = string.Format("Deleted RO: Value = {0}", origLU.GetRoValue(del)); + string padroiddel = del.Length <= 12 ? del + "0000" : del; + RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted"); + } + + } + private static string NewROName(string roName) { string retval = roName; diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ROUsagesExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ROUsagesExt.cs new file mode 100644 index 00000000..8a52cbb7 --- /dev/null +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ROUsagesExt.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Data; +using System.Data.SqlClient; +using Csla; +using Csla.Data; + +namespace VEPROMS.CSLA.Library +{ + public partial class RoUsageInfoList + { + [Serializable()] + private class AffectedROUsagesCriteria + { + public AffectedROUsagesCriteria(int roDbID, string roid, string roDesc, string command, string userID) + { + _RODbID = roDbID; + _ROID = roid; + _RODesc = roDesc; + _Command = command; + _UserID = userID; + } + private int _RODbID; + + public int RODbID + { + get { return _RODbID; } + set { _RODbID = value; } + } + private string _ROID; + + public string ROID + { + get { return _ROID; } + set { _ROID = value; } + } + private string _RODesc; + + public string RODesc + { + get { return _RODesc; } + set { _RODesc = value; } + } + private string _Command; + + public string Command + { + get { return _Command; } + set { _Command = value; } + } + private string _UserID; + + public string UserID + { + get { return _UserID; } + set { _UserID = value; } + } + } + public static RoUsageInfoList GetAffected(int roDbID, string roid, string roDesc, string command) + { + try + { + RoUsageInfoList tmp = DataPortal.Fetch(new AffectedROUsagesCriteria(roDbID, roid, roDesc, command, Environment.UserName)); + RoUsageInfo.AddList(tmp); + tmp.AddEvents(); + return tmp; + } + catch (Exception ex) + { + throw new DbCslaException("Error on ROUsageInfoList.GetAffected", ex); + } + } + private void DataPortal_Fetch(AffectedROUsagesCriteria criteria) + { + this.RaiseListChangedEvents = false; + if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ROUsageInfoList.DataPortal_FetchAffected", GetHashCode()); + try + { + using (SqlConnection cn = Database.VEPROMS_SqlConnection) + { + using (SqlCommand cm = cn.CreateCommand()) + { + cm.CommandType = CommandType.StoredProcedure; + cm.CommandText = "getAffectedRoUsages"; + cm.Parameters.AddWithValue("@RODbID", criteria.RODbID); + cm.Parameters.AddWithValue("@ROID", criteria.ROID); + cm.Parameters.AddWithValue("@RODesc", criteria.RODesc); + cm.Parameters.AddWithValue("@Command", criteria.Command); + cm.Parameters.AddWithValue("@UserID", criteria.UserID); + + using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) + { + IsReadOnly = false; + while (dr.Read()) + this.Add(new RoUsageInfo(dr)); + IsReadOnly = true; + } + } + } + } + catch (Exception ex) + { + if (_MyLog.IsErrorEnabled) _MyLog.Error("TransitionInfoList.DataPortal_FetchAffected", ex); + throw new DbCslaException("ROUsageInfoList.DataPortal_Fetch", ex); + } + this.RaiseListChangedEvents = true; + } + } +} diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/TransitionExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/TransitionExt.cs index a5f6804e..9ec0cd6a 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/TransitionExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/TransitionExt.cs @@ -67,7 +67,7 @@ namespace VEPROMS.CSLA.Library private void DataPortal_Fetch(AffectedTransitonsCriteria criteria) { this.RaiseListChangedEvents = false; - if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] TransitionInfoList.DataPortal_FetchFromID", GetHashCode()); + if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] TransitionInfoList.DataPortal_FetchAffected", GetHashCode()); try { using (SqlConnection cn = Database.VEPROMS_SqlConnection)