C2026-008 - Re-Architect RO.FST to include RO Modification date/time and use those when updating ROs from the RO.FST
This commit is contained in:
@@ -225,41 +225,54 @@ namespace VEPROMS.CSLA.Library
|
||||
}
|
||||
}
|
||||
|
||||
// B2022-026 RO Memory Reduction code - pass in the ROFstInfo
|
||||
public static int RefreshROFst(DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus, ROFstInfo origROFst)
|
||||
{
|
||||
int fixedROs = 0;
|
||||
//C2026-008 Re-Architect RO.FST to include RO Modification date/time
|
||||
// Refresh at item level
|
||||
public static int RefreshROFstAtItemLevel(DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus, ROFstInfo localROFst, int origfstid, int newfstid)
|
||||
{
|
||||
int fixedROs = 0;
|
||||
|
||||
if (dvi.DocVersionConfig.SelectedSlave <= 0)
|
||||
{
|
||||
myProgressBarRefresh(1, 100, "Update MS Word ROs");
|
||||
if (dvi.DocVersionConfig.SelectedSlave <= 0)
|
||||
{
|
||||
// remove word section PDFs to force update of RO values when printed
|
||||
myProgressBarRefresh(1, 100, "Updating MS Word ROs In Progress");
|
||||
Pdf.DeleteDocVersionPDFsWithNewROs(dvi.VersionID, origfstid, newfstid);
|
||||
|
||||
Pdf.DeleteAllDocVersion(dvi.VersionID); // remove word section PDFs to force update of RO values when printed
|
||||
int i = 0;
|
||||
//Loop Through ROs in this docversion that are different than the previous fst
|
||||
myProgressBarRefresh(50, 100, "Updating ROs In PROMS Steps In Progress");
|
||||
int i = 0;
|
||||
List<ItemInfo> list = ItemInfo.GetItemInfoWithChangedROs(dvi.VersionID, origfstid, newfstid);
|
||||
foreach (ItemInfo itm in list)
|
||||
{
|
||||
DateTime start = DateTime.Now;
|
||||
|
||||
foreach (ProcedureInfo proc in dvi.Procedures)
|
||||
{
|
||||
DateTime start = DateTime.Now;
|
||||
ItemInfo.ResetROCounters();
|
||||
myProgressBarRefresh(++i, list.Count, string.Format("{0} ({1}/{2} ROs {3})", itm.MyProcedure.DisplayNumber, i, list.Count, fixedROs));
|
||||
ItemInfo.RefreshReferenceObjects(itm, localROFst);
|
||||
fixedROs += ItemInfo.ROFixCount;
|
||||
|
||||
ProcedureInfo.ResetROCounters();
|
||||
myProgressBarRefresh(++i, dvi.Procedures.Count, string.Format("{0} ({1}/{2} ROs {3})", proc.DisplayNumber, i, dvi.Procedures.Count, fixedROs));
|
||||
ProcedureInfo.RefreshReferenceObjects(proc, origROFst);
|
||||
fixedROs += ProcedureInfo.ROFixCount;
|
||||
TimeSpan ts = DateTime.Now - start;
|
||||
|
||||
TimeSpan ts = DateTime.Now - start;
|
||||
if (tbStatus != null)
|
||||
tbStatus.AppendText(string.Format("Procedure: {1}{0}, Checked {2} Referenced Objects{0}, Fixed {3} Referenced Objects{0}, Elapsed Seconds:{4}{0}{0}", Environment.NewLine, itm.MyProcedure.DisplayNumber, ItemInfo.ROCheckCount, ItemInfo.ROFixCount, ts.TotalSeconds));
|
||||
}
|
||||
|
||||
if (tbStatus != null)
|
||||
tbStatus.AppendText(string.Format("Procedure: {1}{0}, Checked {2} Referenced Objects{0}, Fixed {3} Referenced Objects{0}, Elapsed Seconds:{4}{0}{0}", Environment.NewLine, proc.DisplayNumber, ProcedureInfo.ROCheckCount, ProcedureInfo.ROFixCount, ts.TotalSeconds));
|
||||
}
|
||||
}
|
||||
//Update the DocVersion Associations to link to the new RO FST id and current date/time
|
||||
using (DocVersion dv = DocVersion.Get(dvi.VersionID))
|
||||
{
|
||||
if (dvi.DocVersionAssociations[0].MyROFst.ROFstID != newfstid)
|
||||
{
|
||||
dv.DocVersionAssociations[0].MyROFst = localROFst.GetJustROFst();
|
||||
SetAssociationLastCompleted(dv, DateTime.Now.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return fixedROs;
|
||||
}
|
||||
return fixedROs;
|
||||
}
|
||||
|
||||
|
||||
//C2022-028 for Admin tool to check for bad RO links
|
||||
//B2022-144 we now loop through checked procedures list from Admin Tools and call this method for each procedure we want to process
|
||||
public static int CheckROLinksInThisProcedure(ProcedureInfo proc, System.Windows.Forms.TextBox tbStatus)
|
||||
//C2022-028 for Admin tool to check for bad RO links
|
||||
//B2022-144 we now loop through checked procedures list from Admin Tools and call this method for each procedure we want to process
|
||||
public static int CheckROLinksInThisProcedure(ProcedureInfo proc, System.Windows.Forms.TextBox tbStatus)
|
||||
{
|
||||
int FoundBadROLinks = 0;
|
||||
DocVersionInfo dvi = DocVersionInfo.Get(proc.MyDocVersion.VersionID);
|
||||
@@ -291,34 +304,6 @@ namespace VEPROMS.CSLA.Library
|
||||
return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\ROUpdateReport_" + ValidFileName.FixFileName(dvi.MyFolder.Name.Replace(" ", "_") + "_" + DateTime.Now.ToString("MM-dd-yyyy_HH-mm-ss") + ".txt");
|
||||
}
|
||||
|
||||
// B2022-026 RO Memory Reduction code - moved the call to UpdateROFst() to before we call RefreshROFst
|
||||
// so that we used the correct ROFstInfo which as the needed event methods set when updated RO Table types
|
||||
public static ROFst RefreshROFst(DocVersion docver, ROFstInfo origROFst, ROFstInfoProgressBarRefresh myProgressBarRefresh, System.Windows.Forms.TextBox tbStatus)
|
||||
{
|
||||
ROFst rofst = null;
|
||||
|
||||
rofst = docver.DocVersionAssociations[0].MyROFst;
|
||||
|
||||
DocVersionInfo dvi = DocVersionInfo.Get(docver.VersionID);
|
||||
|
||||
SetAssociationLastCompleted(docver, string.Empty);
|
||||
int fixedROs = RefreshROFst(dvi, myProgressBarRefresh, tbStatus, origROFst);
|
||||
SetAssociationLastCompleted(docver, DateTime.Now.ToString()); // RO Update completed successfully and un-interrupted, save the date/time to the Doc Version Association config
|
||||
|
||||
myProgressBarRefresh(100, 100, "RO Update Complete"); // update the progress bar
|
||||
System.Windows.Forms.Application.DoEvents();
|
||||
|
||||
// pop up a message window telling the user the RO Update has completed and how many ROs were updated
|
||||
// If we are updating RO from the Admin Tools (from the V button) and we are updating more than on procedure set, then just append the "RO Update Complete" text
|
||||
// To the MessageList. Once completed will all procedure sets, Admin Tools will display one message box with all the results in it.
|
||||
if (MessageList == null)
|
||||
FlexibleMessageBox.Show(fixedROs == 0 ? "No ROs Required Updating" : string.Format("{0} ROs Updated for {1}", fixedROs, dvi.MyFolder.Name), "RO Update Complete");
|
||||
else
|
||||
MessageList.AppendLine((fixedROs == 0 ? "No ROs Required Updating for " : string.Format("{0} ROs Updated for ", fixedROs)) + dvi.MyFolder.Name);
|
||||
|
||||
return rofst;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates an ro.fst into a sql database.
|
||||
/// </summary>
|
||||
@@ -670,188 +655,7 @@ namespace VEPROMS.CSLA.Library
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private static void UpdateROValuesText(ROFstInfo origROFstInfo, ROFst newROFst, DocVersionInfo dvi, ROFstInfoProgressBarRefresh myProgressBarRefresh, List<string> MyChangedFigureROIDs)
|
||||
{
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, 100, "Update Ro Values");
|
||||
|
||||
string versionList = dvi.VersionID.ToString();
|
||||
|
||||
ROFSTLookup origLookup = new ROFSTLookup(origROFstInfo.ROFstID, dvi);
|
||||
ROFSTLookup newLookup = new ROFSTLookup(newROFst.ROFstID, dvi);
|
||||
|
||||
List<string> delList = new List<string>();
|
||||
List<string> chgList = newLookup.GetValueDifferences(origROFstInfo.ROFstID, ref delList);
|
||||
|
||||
// Any figures which have been changed will be included in the list of values that have changed.
|
||||
if (MyChangedFigureROIDs != null)
|
||||
{
|
||||
foreach (string roid in MyChangedFigureROIDs)
|
||||
{
|
||||
if (!chgList.Contains(roid)) chgList.Add(roid);
|
||||
}
|
||||
}
|
||||
|
||||
string RoidList = GetRoidList(newROFst.RODbID, chgList);
|
||||
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
|
||||
List<string> activeRoids = BuildActiveROIDsForRoUsages12(RoidList, versionList);
|
||||
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Updating RO Values");
|
||||
int iCount = 0;
|
||||
|
||||
if (activeRoids.Count > 0)
|
||||
{
|
||||
foreach (string chg in chgList)
|
||||
{
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Updating RO Values");
|
||||
if (activeRoids.Contains(chg.Substring(0, 12)))
|
||||
{
|
||||
ROFSTLookup.rochild roch = newLookup.GetRoChild(chg);
|
||||
string desc = string.Format("Change in RO Values: Old value = {0}, New value = {1}", origLookup.GetRoChild(chg).value, roch.value);
|
||||
|
||||
// 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;
|
||||
// B2022-088: Find Doc Ro button not working in Word Sections
|
||||
string padroid = ROFSTLookup.FormatRoidKey(chg, true);
|
||||
|
||||
using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed", versionList))
|
||||
{
|
||||
foreach (RoUsageInfo roUsg in affected)
|
||||
{
|
||||
using (Content content = Content.Get(roUsg.MyContent.ContentID))
|
||||
{
|
||||
foreach (ItemInfo ii in roUsg.MyContent.ContentItems)
|
||||
{
|
||||
string val = newLookup.GetTranslatedRoValue(padroid, ii.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta, ii.ActiveFormat.PlantFormat.FormatData.SectData.UseTildaPoundCharsForSuperSubScriptInROValues, false, ii);
|
||||
content.FixContentText(roUsg, val, roch.type, origROFstInfo, true);
|
||||
|
||||
if (content.IsDirty)
|
||||
{
|
||||
// Update UserID and DTS when RO Value is updated.
|
||||
content.UserID = Volian.Base.Library.VlnSettings.UserID;
|
||||
content.DTS = DateTime.Now;
|
||||
content.Save();
|
||||
|
||||
if (content.MyGrid != null)
|
||||
{
|
||||
GridInfo.Refresh(content.MyGrid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
|
||||
List<string> activeDRoids = BuildActiveROIDsForDRoUsages12(RoidList, versionList);
|
||||
iCount = 0;
|
||||
|
||||
if (activeDRoids.Count > 0)
|
||||
{
|
||||
foreach (string chg in chgList)
|
||||
{
|
||||
// B2022-088: Find Doc Ro button not working in Word Sections
|
||||
// string padroid = chg.Length <= 12 ? chg + "0000" : chg;
|
||||
string padroid = ROFSTLookup.FormatRoidKey(chg, true);
|
||||
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Updating RO Values");
|
||||
|
||||
if (activeDRoids.Contains(chg.Substring(0, 12)))
|
||||
{
|
||||
ROFSTLookup.rochild roch = newLookup.GetRoChild(chg);
|
||||
|
||||
string desc = string.Format("Change in RO Values: Old value = {0}, New value = {1}", origLookup.GetRoChild(chg).value, roch.value);
|
||||
|
||||
// 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.
|
||||
using (DROUsageInfoList affected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed", versionList))
|
||||
{
|
||||
foreach (DROUsageInfo droUsg in affected)
|
||||
{
|
||||
Pdf.DeleteAll(droUsg.DocID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
iCount = 0;
|
||||
string RoidDelList = GetRoidList(newROFst.RODbID, delList);
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
|
||||
activeRoids = BuildActiveROIDsForRoUsages12(RoidDelList, versionList);
|
||||
|
||||
if (activeRoids.Count > 0)
|
||||
{
|
||||
foreach (string del in delList)
|
||||
{
|
||||
// B2022-088: Find Doc Ro button not working in Word Sections
|
||||
//string padroiddel = del.Length <= 12 ? del + "0000" : del;
|
||||
string padroiddel = ROFSTLookup.FormatRoidKey(del, true);
|
||||
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
|
||||
string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(del).value);
|
||||
|
||||
if (activeRoids.Contains(del.Substring(0, 12).ToUpper()))
|
||||
{
|
||||
using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted", versionList))
|
||||
{
|
||||
foreach (RoUsageInfo roUsg in affected)
|
||||
{
|
||||
using (Content content = Content.Get(roUsg.MyContent.ContentID))
|
||||
{
|
||||
content.FixContentText(roUsg, "?", 0, origROFstInfo);
|
||||
if (content.IsDirty)
|
||||
{
|
||||
// Update UserID and DTS when RO Value is updated.
|
||||
content.UserID = Volian.Base.Library.VlnSettings.UserID;
|
||||
content.DTS = DateTime.Now;
|
||||
content.Save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(0, chgList.Count, "Getting List of ROs Used");
|
||||
activeDRoids = BuildActiveROIDsForDRoUsages12(RoidDelList, versionList);
|
||||
iCount = 0;
|
||||
|
||||
if (activeDRoids.Count > 0)
|
||||
{
|
||||
foreach (string del in delList)
|
||||
{
|
||||
|
||||
// B2022-088: Find Doc Ro button not working in Word Sections
|
||||
string padroiddel = ROFSTLookup.FormatRoidKey(del, true);
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
|
||||
|
||||
string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(del).value);
|
||||
|
||||
// If there's an issue then maybe try getting the RoChild with the Padded roid instead
|
||||
//string desc = string.Format("Deleted RO: Value = {0}", origLookup.GetRoChild(padroiddel).value);
|
||||
|
||||
if (activeDRoids.Contains(del.Substring(0, 12).ToUpper()))
|
||||
{
|
||||
using (DROUsageInfoList Daffected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted", versionList))
|
||||
{
|
||||
foreach (DROUsageInfo droUsg in Daffected)
|
||||
{
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(++iCount, chgList.Count, "Removing Old RO Values");
|
||||
Pdf.DeleteAll(droUsg.DocID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (myProgressBarRefresh != null) myProgressBarRefresh(100, 100, "RO Values Updated");
|
||||
}
|
||||
|
||||
private static DateTime ShowDuration(DateTime dtLast, string message)
|
||||
private static DateTime ShowDuration(DateTime dtLast, string message)
|
||||
{
|
||||
DateTime dtNext = DateTime.Now;
|
||||
Console.WriteLine("{0,10:#####0.00},'{1}'", TimeSpan.FromTicks(dtNext.Ticks - dtLast.Ticks).TotalSeconds, message);
|
||||
|
||||
Reference in New Issue
Block a user