Compare commits

...

13 Commits

Author SHA1 Message Date
8f154ebf48 C2025-001 Replace 3rd party Ionic.zip component 2025-08-21 14:25:53 -04:00
ba9d56811c Merge pull request 'C2025-035 RO Performance Improvement' (#601) from C2025-035 into Development
Reviewed-on: #601
Reviewed-by: Paul Larsen <plarsen@volian.com>
2025-08-19 14:24:55 -04:00
8eb8a328d1 C2025-035 RO Performance Improvement
Add some code to rebuild specific indexes (like [IX_RofstID_DbiID_ParentID] ON [dbo].[RofstChild])
after a new RO.FST is imported.
2025-08-19 13:32:23 -04:00
e8327316dd Merge pull request 'B2025-041-Set-Quick-Print-overwrite-pdf-to-false' (#599) from B2025-041-Set-Quick-Print-overwrite-pdf-to-false into Development
good for testing phase
2025-08-14 13:52:37 -04:00
3bd7001106 B2025-041-Set-Quick-Print-overwrite-pdf-to-false 2025-08-14 11:23:22 -04:00
2e5ad53c6a Merge pull request 'B2025-042 RO Editor FST Export ParentChild whitespace' (#598) from B2025-042 into Development
good for testing phase
2025-08-14 11:12:32 -04:00
ca0ae279e0 B2025-042 RO Editor FST Export ParentChild whitespace 2025-08-14 10:16:22 -04:00
adf1120436 Merge pull request 'B2025-037 When Export an Approved procedure with multi-unit and ROs with Parent Child, it exports as the default text and not the specific unit text.' (#597) from B2025-037 into Development
good for testing phase
2025-08-13 10:52:17 -04:00
7879391de0 B2025-037 When Export an Approved procedure with multi-unit and ROs with Parent Child, it exports as the default text and not the specific unit text. 2025-08-13 10:45:49 -04:00
11ba9ea418 Merge pull request 'C2025-048-Set-Quick-Print-overwrite-pdf-to-false' (#596) from C2025-048-Set-Quick-Print-overwrite-pdf-to-false into Development
good for testing phase
2025-08-13 10:34:12 -04:00
0fe84ca17c Merge pull request 'C2025-045 Improve Performance loading procedures with Alarms.' (#594) from C2025-045 into Development
good for testing phase
2025-08-13 09:17:55 -04:00
1009ca5111 Merge remote-tracking branch 'origin/Development' into C2025-048-Set-Quick-Print-overwrite-pdf-to-false 2025-08-13 09:14:34 -04:00
dba1f4e71c C2025-048-Set-Quick-Print-overwrite-pdf-to-false 2025-08-13 09:11:52 -04:00
8 changed files with 264 additions and 233 deletions

View File

@@ -735,23 +735,27 @@ namespace RODBInterface
else
parentValue = nd.InnerText;
//applicValues = "";
applicValues = string.Format("<APL DefaultVal={0}", parentValue);
int pcChildIdx = 0;
//C2022-001 only save the child ro value in the RO.FST if it is different than the parent (default) value
foreach (string c in pcChildern)
if (parentName != "#whitespace")
{
//string csufx = CvtUserFldToFld(c);
pcChildIdx++;
string csufx = string.Format("_PCCHILD{0}", pcChildIdx);
//applicValues += ",";
XmlNode cn = elmnode.SelectSingleNode(parentName + csufx);
if (cn == null || cn.InnerText.Length == 0) // B2024-004 use Parent value if Child text length is zero
applicValues += string.Format(",UnitIdx={0} Value={1}", pcChildIdx, parentValue); // use parent value as default
else
//applicValues = "";
applicValues = string.Format("<APL DefaultVal={0}", parentValue);
int pcChildIdx = 0;
//C2022-001 only save the child ro value in the RO.FST if it is different than the parent (default) value
foreach (string c in pcChildern)
{
if (parentValue != cn.InnerText)
applicValues += string.Format(",UnitIdx={0} Value={1}", pcChildIdx, cn.InnerText);
//string csufx = CvtUserFldToFld(c);
pcChildIdx++;
string csufx = string.Format("_PCCHILD{0}", pcChildIdx);
//applicValues += ",";
XmlNode cn = elmnode.SelectSingleNode(parentName + csufx);
if (cn == null || cn.InnerText.Length == 0) // B2024-004 use Parent value if Child text length is zero
applicValues += string.Format(",UnitIdx={0} Value={1}", pcChildIdx, parentValue); // use parent value as default
else
{
if (parentValue != cn.InnerText)
applicValues += string.Format(",UnitIdx={0} Value={1}", pcChildIdx, cn.InnerText);
}
}
}
applicValues += " /APL>";

View File

@@ -66,6 +66,12 @@ namespace VEPROMS
set { _prtSectID = value; }
}
private bool _OverwritePDF;
public bool OverwritePDF
{
get { return cbxOverwritePDF2.Checked; }
set { cbxOverwritePDF2.Checked = value; }
}
// C2018-033 Used to turn off using the date/time PDF file prefix and suffix when doing batch file autmatic baseline print testing (frmVEPROMS.cs RunAutomatic())
// This is needed so the the automatic baselines can compare results from different runs of PROMS

View File

@@ -18917,9 +18917,10 @@ GO
Copyright 2020 - Volian Enterprises, Inc. All rights reserved.
*****************************************************************************/
/*
==========================================================================================================
Author: Jake Ropar
==========================================================================================================
Author: Jake Ropar / Matthew Schill
Create Date: 06/23/2022
Modify Date: 08/18/2025
Description: Finalizes Rofst Header Record / Updates LoadedDate if Success
==========================================================================================================
*/
@@ -18936,13 +18937,18 @@ GO
Set LoadedDate = GetDate()
Where RofstID = @RofstID;
--always rebuild the rofst child and default indexes
DBCC DBREINDEX ('RofstChild');
DBCC DBREINDEX ('RofstDefaultValue');
-- Rebuild/Reorganize Indexes
Exec [dbo].[vesp_UtilityCheckIndexes] 20.0, 5.0, 0, 1;
Return;
End
Go
GO
IF (@@Error = 0) PRINT 'Procedure Creation: [vesp_RofstHeaderFinalizeLoad] Succeeded'
ELSE PRINT 'Procedure Creation: [vesp_RofstHeaderFinalizeLoad] Error on Creation'
@@ -24377,8 +24383,8 @@ BEGIN TRY -- Try Block
DECLARE @RevDate varchar(255)
DECLARE @RevDescription varchar(255)
set @RevDate = '08/13/2025 8:07 AM'
set @RevDescription = 'Improve Performance loading procedures with Alarms'
set @RevDate = '08/18/2025 2:07 PM'
set @RevDescription = 'Updated Index maintenance that occurs after RO FST Load to improve RO Performance'
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription

View File

@@ -111,10 +111,6 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\3rdPartyLibraries\DotNetBar\DotNetBar4.6Build\DevComponents.DotNetBar2.dll</HintPath>
</Reference>
<Reference Include="Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\3rdPartyLibraries\Ionic\Ionic.Zip.dll</HintPath>
</Reference>
<Reference Include="Itenso.Rtf.Interpreter">
<HintPath>..\..\..\..\3rdPartyLibraries\RtfConverter\bin\Debug\Itenso.Rtf.Interpreter.dll</HintPath>
</Reference>
@@ -133,6 +129,8 @@
<Reference Include="System.Deployment" />
<Reference Include="System.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Runtime.Remoting" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />

View File

@@ -1309,7 +1309,7 @@ namespace VEPROMS
pi.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
if (si.IsApproved == 1)
{
dlgExportImport dlg = new dlgExportImport("Export", pi, MyFrmVEPROMS, (E_UCFImportOptions)0); // "true tell export to convert ROs and Transitions to text
dlgExportImport dlg = new dlgExportImport("Export", pi, MyFrmVEPROMS, (E_UCFImportOptions)0, selectedSlave); // "true tell export to convert ROs and Transitions to text
dlg.DocReplace = frm.DocReplace; // this tells approval to prepare an export file with resolved transitions and ROs, word sections are saved with resolved ROs during approval PDF creation and saved in DocReplace
System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
dlg.ExportItem(xd, pi, "procedure");

View File

@@ -7,7 +7,7 @@ using Volian.Controls.Library;
using Volian.Base.Library;
using System.Xml;
using System.IO;
using Ionic.Zip;
using System.IO.Compression;
using System.Text.RegularExpressions;
using JR.Utils.GUI.Forms;
using System.Linq;
@@ -188,14 +188,13 @@ namespace VEPROMS
if (MyFolder != null)
{
sfd.FileName = string.Format("{0}-{1}.expx", Database.ActiveDatabase, MyFolder.Name);
if (sfd.ShowDialog(this) == DialogResult.OK && sfd.FileName != string.Empty)
{
txtExport.Text = sfd.FileName;
if (File.Exists(txtExport.Text))
File.Delete(txtExport.Text);
MyExpxZipFile = new ZipFile(txtExport.Text, Encoding.UTF8);
MyExpxZipFile.Save();
}
if (sfd.ShowDialog(this) == DialogResult.OK && sfd.FileName != string.Empty)
{
txtExport.Text = sfd.FileName;
if (File.Exists(txtExport.Text))
File.Delete(txtExport.Text);
MyExpZipFileName = txtExport.Text;
}
}
else if (MyProcedure != null)
{
@@ -211,8 +210,8 @@ namespace VEPROMS
else
lblExportStatus.Text = "Awaiting Export File Name:";
}
private ZipFile MyExpxZipFile = null;
private ZipFile MyImpxZipFile = null;
private string MyExpZipFileName = null;
private string MyImpZipFileName = null;
private DateTime MyStart;
private bool successfullExport = true;
@@ -892,84 +891,94 @@ namespace VEPROMS
}
private bool LoadImportDataDocument()
{
floatFoldout = new Dictionary<int, int>();
ZipEntry ze = MyExpxZipFile[0];
string fn = PEIPath + @"\" + ze.FileName;
ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently);
XmlDocument xd = new XmlDocument();
xd.Load(fn);
bool didImp = LoadFormats(xd, "folder/formats/format");
if (!didImp)
using (FileStream zipToOpen = new FileStream(MyExpZipFileName, FileMode.OpenOrCreate))
{
this.Cursor = Cursors.Default;
this.btnImport.Enabled = true; // allow user to select a different export file to import
this.btnDoImport.Enabled = true; // allow user to change mind and perform the import
return false; // Return False to Indicate that the Import did not succeed
}
string name = xd.DocumentElement.Attributes.GetNamedItem("name").InnerText;
Folder ff = AddFolder(Folder.Get(MyFolder.FolderID), xd, name);
if (ff == null)
{
// C2020-032: Import Procedure set when existing name exists, allow user to import with 'Copy (#) of'.
// This is similar functionality to the import of a procedure without the overwrite part.
string msg = string.Format("The procedure set you are importing, {0}, already exists.\n\nDo you want to import {0} as a COPY of the existing set?\n\nThis will prefix the name with \"Copy (#) of\"", name);
DialogResult dr = MessageBox.Show(this, msg, "Create Copy Of Existing Procedure Set", MessageBoxButtons.OKCancel, MessageBoxIcon.Stop);
if (dr == DialogResult.OK)
using (ZipArchive MyExpxZipFile = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
string number = "";
int max = -1;
// get maximum number of existing copies.
foreach (FolderInfo fi in MyFolder.ChildFolders)
floatFoldout = new Dictionary<int, int>();
ZipArchiveEntry ze = MyExpxZipFile.Entries[0];
if (!Directory.Exists(Path.Combine(PEIPath, "folder")))
Directory.CreateDirectory(Path.Combine(PEIPath, "folder"));
string fn = Path.Combine(PEIPath, "folder", ze.Name);
ze.ExtractToFile(fn, true);
XmlDocument xd = new XmlDocument();
xd.Load(fn);
bool didImp = LoadFormats(xd, "folder/formats/format");
if (!didImp)
{
int indx = fi.Name.IndexOf("Copy (");
if (indx > -1)
{
int indxend = fi.Name.IndexOf(")", indx);
if (indxend > indx)
{
string tmp = fi.Name.Substring(indx + 6, indxend - (indx + 6));
int ii = Convert.ToInt32(tmp);
if (ii > max) max = ii;
}
}
this.Cursor = Cursors.Default;
this.btnImport.Enabled = true; // allow user to select a different export file to import
this.btnDoImport.Enabled = true; // allow user to change mind and perform the import
return false; // Return False to Indicate that the Import did not succeed
}
number = max > -1 ? (max + 1).ToString() : "1";
name = string.Format("Copy ({0}) of {1}", number, name);
string name = xd.DocumentElement.Attributes.GetNamedItem("name").InnerText;
Folder ff = AddFolder(Folder.Get(MyFolder.FolderID), xd, name);
if (ff == null)
{
// C2020-032: Import Procedure set when existing name exists, allow user to import with 'Copy (#) of'.
// This is similar functionality to the import of a procedure without the overwrite part.
string msg = string.Format("The procedure set you are importing, {0}, already exists.\n\nDo you want to import {0} as a COPY of the existing set?\n\nThis will prefix the name with \"Copy (#) of\"", name);
DialogResult dr = MessageBox.Show(this, msg, "Create Copy Of Existing Procedure Set", MessageBoxButtons.OKCancel, MessageBoxIcon.Stop);
if (dr == DialogResult.OK)
{
string number = "";
int max = -1;
// get maximum number of existing copies.
foreach (FolderInfo fi in MyFolder.ChildFolders)
{
int indx = fi.Name.IndexOf("Copy (");
if (indx > -1)
{
int indxend = fi.Name.IndexOf(")", indx);
if (indxend > indx)
{
string tmp = fi.Name.Substring(indx + 6, indxend - (indx + 6));
int ii = Convert.ToInt32(tmp);
if (ii > max) max = ii;
}
}
}
number = max > -1 ? (max + 1).ToString() : "1";
name = string.Format("Copy ({0}) of {1}", number, name);
ff = AddFolder(Folder.Get(MyFolder.FolderID), xd, name);
ff = AddFolder(Folder.Get(MyFolder.FolderID), xd, name);
}
else
return false;
}
_MyNewFolder = FolderInfo.Get(ff.FolderID);
AddAnnotationTypes(xd);
DocVersionInfo dvi = AddDocVersion(ff, xd);
MyDocVersion = dvi;
xd = null;
lblImportStatus.Text = "Creating Procedures...";
Application.DoEvents();
ProcedureInfo pi = null;
pbImportProcedure.Value = 0;
pbImportProcedure.Maximum = MyExpxZipFile.Entries.Count - 1;
if (!Directory.Exists(Path.Combine(PEIPath, "procedures")))
Directory.CreateDirectory(Path.Combine(PEIPath, "procedures"));
for (int i = 1; i < MyExpxZipFile.Entries.Count; i++)
{
ze = MyExpxZipFile.Entries[i];
fn = Path.Combine(PEIPath, "procedures", ze.Name);
ze.ExtractToFile(fn, true);
xd = new XmlDocument();
xd.Load(fn);
pi = AddProcedure(xd.DocumentElement, dvi, pi);
GC.Collect(); // need to cleanup memory after importing each procedure due to use of Regular Expressions in processing RO and Transition links
}
DirectoryInfo di = new DirectoryInfo(PEIPath);
DirectoryInfo[] dis = di.GetDirectories();
for (int d = 0; d < dis.Length; d++)
dis[d].Delete(true);
lblImportStatus.Text = "Updating Transitions";
AddTransitions();
FixFloatingFoldouts();
SaveTransitionAndItemContentIDs();
return true;
}
else
return false;
}
_MyNewFolder = FolderInfo.Get(ff.FolderID);
AddAnnotationTypes(xd);
DocVersionInfo dvi = AddDocVersion(ff, xd);
MyDocVersion = dvi;
xd = null;
lblImportStatus.Text = "Creating Procedures...";
Application.DoEvents();
ProcedureInfo pi = null;
pbImportProcedure.Value = 0;
pbImportProcedure.Maximum = MyExpxZipFile.Entries.Count - 1;
for (int i = 1; i < MyExpxZipFile.Entries.Count; i++)
{
ze = MyExpxZipFile[i];
fn = PEIPath + @"\" + ze.FileName;
ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently);
xd = new XmlDocument();
xd.Load(fn);
pi = AddProcedure(xd.DocumentElement, dvi, pi);
GC.Collect(); // need to cleanup memory after importing each procedure due to use of Regular Expressions in processing RO and Transition links
}
DirectoryInfo di = new DirectoryInfo(PEIPath);
DirectoryInfo[] dis = di.GetDirectories();
for (int d = 0; d < dis.Length; d++)
dis[d].Delete(true);
lblImportStatus.Text = "Updating Transitions";
AddTransitions();
FixFloatingFoldouts();
SaveTransitionAndItemContentIDs();
return true;
}
private void FixSectionStart(ProcedureInfo pi)
{
@@ -1254,85 +1263,85 @@ namespace VEPROMS
// the xml files are then added (or replaced) in the .impx file.
private void SaveTransitionAndItemContentIDs()
{
XmlDocument xd = new XmlDocument();
XmlElement xe = xd.CreateElement("items");
xd.AppendChild(xe);
string fn = PEIPath + @"\items.xml";
foreach (int key in Old2NewItem.Keys)
using (FileStream zipToOpen = new FileStream(MyImpZipFileName, FileMode.OpenOrCreate))
{
xe = xd.CreateElement("item");
xe.Attributes.SetNamedItem(AddAttribute(xd, "old", key.ToString()));
xe.Attributes.SetNamedItem(AddAttribute(xd, "new", Old2NewItem[key].ToString()));
xd.DocumentElement.AppendChild(xe);
}
xd.Save(fn);
ZipEntry ze = MyImpxZipFile["items.xml"];
MyImpxZipFile.RemoveEntry(ze);
MyImpxZipFile.Save();
MyImpxZipFile.AddFile(fn, "");
MyImpxZipFile.Save();
File.Delete(fn);
xd = new XmlDocument();
xe = xd.CreateElement("contents");
xd.AppendChild(xe);
fn = PEIPath + @"\contents.xml";
foreach (int key in Old2NewContent.Keys)
{
xe = xd.CreateElement("content");
xe.Attributes.SetNamedItem(AddAttribute(xd, "old", key.ToString()));
xe.Attributes.SetNamedItem(AddAttribute(xd, "new", Old2NewContent[key].ToString()));
xd.DocumentElement.AppendChild(xe);
}
xd.Save(fn);
ze = MyImpxZipFile["contents.xml"];
MyImpxZipFile.RemoveEntry(ze);
MyImpxZipFile.Save();
MyImpxZipFile.AddFile(fn, "");
MyImpxZipFile.Save();
File.Delete(fn);
xd = new XmlDocument();
xe = xd.CreateElement("transitions");
xd.AppendChild(xe);
fn = PEIPath + @"\transitions.xml";
if (PendingTransitions != null && PendingTransitions.DocumentElement.HasChildNodes)
{
foreach (XmlNode nd in PendingTransitions.DocumentElement.ChildNodes)
using (ZipArchive MyImpxZipFile = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
if (nd.InnerText == "")
xd.DocumentElement.AppendChild(xd.ImportNode(nd, true));
XmlDocument xd = new XmlDocument();
XmlElement xe = xd.CreateElement("items");
xd.AppendChild(xe);
string fn = PEIPath + @"\items.xml";
foreach (int key in Old2NewItem.Keys)
{
xe = xd.CreateElement("item");
xe.Attributes.SetNamedItem(AddAttribute(xd, "old", key.ToString()));
xe.Attributes.SetNamedItem(AddAttribute(xd, "new", Old2NewItem[key].ToString()));
xd.DocumentElement.AppendChild(xe);
}
xd.Save(fn);
ZipArchiveEntry ze = MyImpxZipFile.GetEntry("items.xml");
ze.Delete();
_ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn));
File.Delete(fn);
xd = new XmlDocument();
xe = xd.CreateElement("contents");
xd.AppendChild(xe);
fn = PEIPath + @"\contents.xml";
foreach (int key in Old2NewContent.Keys)
{
xe = xd.CreateElement("content");
xe.Attributes.SetNamedItem(AddAttribute(xd, "old", key.ToString()));
xe.Attributes.SetNamedItem(AddAttribute(xd, "new", Old2NewContent[key].ToString()));
xd.DocumentElement.AppendChild(xe);
}
xd.Save(fn);
ze = MyImpxZipFile.GetEntry("contents.xml");
ze.Delete();
_ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn));
File.Delete(fn);
xd = new XmlDocument();
xe = xd.CreateElement("transitions");
xd.AppendChild(xe);
fn = PEIPath + @"\transitions.xml";
if (PendingTransitions != null && PendingTransitions.DocumentElement.HasChildNodes)
{
foreach (XmlNode nd in PendingTransitions.DocumentElement.ChildNodes)
{
if (nd.InnerText == "")
xd.DocumentElement.AppendChild(xd.ImportNode(nd, true));
}
}
xd.Save(fn);
ze = MyImpxZipFile.GetEntry("transitions.xml");
ze.Delete();
_ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn));
File.Delete(fn);
}
}
xd.Save(fn);
ze = MyImpxZipFile["transitions.xml"];
MyImpxZipFile.RemoveEntry(ze);
MyImpxZipFile.Save();
MyImpxZipFile.AddFile(fn, "");
MyImpxZipFile.Save();
File.Delete(fn);
}
// This is called only when we are importing an entire folder and there is a .impx file (a zip file)
// the name of the .impx file is based on the folder name containing the export file being imported
// This will read in the saved ItemIDs (old and new), ContentIDs (old andnew), library document IDs (old and new), and pending transitions
private void ReadTransitionAndItemContentIDs()
private void ReadTransitionAndItemContentIDs(ZipArchive MyImpxZipFile)
{
ZipEntry ze = MyImpxZipFile["items.xml"];
ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently);
ZipArchiveEntry ze = MyImpxZipFile.GetEntry("items.xml");
string fn = PEIPath + @"\items.xml";
ze.ExtractToFile(fn, true);
XmlDocument xd = new XmlDocument();
xd.Load(fn);
// B2016-176, B2016-197 Transitions were no always properly resolved - don't load in the old item ids
File.Delete(fn);
ze = MyImpxZipFile["contents.xml"];
ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently);
ze = MyImpxZipFile.GetEntry("contents.xml");
fn = PEIPath + @"\contents.xml";
ze.ExtractToFile(fn, true);
xd = new XmlDocument();
xd.Load(fn);
// B2016-176, B2016-197 Transitions were no always properly resolved - don't load in the old content ids
File.Delete(fn);
ze = MyImpxZipFile["libdocs.xml"];
ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently);
ze = MyImpxZipFile.GetEntry("libdocs.xml");
fn = PEIPath + @"\libdocs.xml";
ze.ExtractToFile(fn, true);
xd = new XmlDocument();
xd.Load(fn);
XmlNodeList nl = xd.SelectNodes("//libdoc");
@@ -1344,9 +1353,9 @@ namespace VEPROMS
Old2NewLibDoc.Add(oldid, newid);
}
File.Delete(fn);
ze = MyImpxZipFile["transitions.xml"];
ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently);
ze = MyImpxZipFile.GetEntry("transitions.xml");
fn = PEIPath + @"\transitions.xml";
ze.ExtractToFile(fn, true);
PendingTransitions.Load(fn);
File.Delete(fn);
}
@@ -1374,53 +1383,53 @@ namespace VEPROMS
else
dn = fi.Name.Substring(0, fi.Name.IndexOf("."));
txtImport.Text = ofd.FileName;
ReadOptions ro = new ReadOptions();
ro.Encoding = Encoding.UTF8;
MyExpxZipFile = ZipFile.Read(txtImport.Text, ro);
string fn = string.Format(@"{0}\{1}.impx", PEIPath, dn);
if (File.Exists(fn))
MyExpZipFileName = txtImport.Text;
string fn = string.Format(@"{0}\{1}.impx", PEIPath, dn);
MyImpZipFileName = fn;
if (File.Exists(fn))
{
MyImpxZipFile = ZipFile.Read(fn, ro);
ReadTransitionAndItemContentIDs();
using (ZipArchive MyImpxZipFile = ZipFile.OpenRead(fn))
ReadTransitionAndItemContentIDs(MyImpxZipFile);
}
else
{
MyImpxZipFile = new ZipFile(fn, Encoding.UTF8);
//transitions
XmlElement xe = PendingTransitions.CreateElement("transitions");
PendingTransitions.AppendChild(xe);
fn = PEIPath + @"\transitions.xml";
PendingTransitions.Save(fn);
MyImpxZipFile.AddFile(fn, "");
MyImpxZipFile.Save();
File.Delete(fn);
//itemids
XmlDocument xd = new XmlDocument();
xe = xd.CreateElement("items");
xd.AppendChild(xe);
fn = PEIPath + @"\items.xml";
xd.Save(fn);
MyImpxZipFile.AddFile(fn, "");
MyImpxZipFile.Save();
File.Delete(fn);
//contentids
xd = new XmlDocument();
xe = xd.CreateElement("contents");
xd.AppendChild(xe);
fn = PEIPath + @"\contents.xml";
xd.Save(fn);
MyImpxZipFile.AddFile(fn, "");
MyImpxZipFile.Save();
File.Delete(fn);
//libdocids
xd = new XmlDocument();
xe = xd.CreateElement("libdocs");
xd.AppendChild(xe);
fn = PEIPath + @"\libdocs.xml";
xd.Save(fn);
MyImpxZipFile.AddFile(fn, "");
MyImpxZipFile.Save();
File.Delete(fn);
using (FileStream zipToOpen = new FileStream(fn, FileMode.OpenOrCreate))
{
using (ZipArchive MyImpxZipFile = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
//transitions
XmlElement xe = PendingTransitions.CreateElement("transitions");
PendingTransitions.AppendChild(xe);
fn = PEIPath + @"\transitions.xml";
PendingTransitions.Save(fn);
_ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn));
File.Delete(fn);
//itemids
XmlDocument xd = new XmlDocument();
xe = xd.CreateElement("items");
xd.AppendChild(xe);
fn = PEIPath + @"\items.xml";
xd.Save(fn);
_ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn));
File.Delete(fn);
//contentids
xd = new XmlDocument();
xe = xd.CreateElement("contents");
xd.AppendChild(xe);
fn = PEIPath + @"\contents.xml";
xd.Save(fn);
_ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn));
File.Delete(fn);
//libdocids
xd = new XmlDocument();
xe = xd.CreateElement("libdocs");
xd.AppendChild(xe);
fn = PEIPath + @"\libdocs.xml";
xd.Save(fn);
_ = MyImpxZipFile.CreateEntryFromFile(fn, Path.GetFileName(fn));
File.Delete(fn);
}
}
}
}
if (MyDocVersion != null)
@@ -1595,27 +1604,31 @@ namespace VEPROMS
ExportAssociation(xe, ai, "association");
string fn = PEIPath + @"\folder.xml";
xn.OwnerDocument.Save(fn);
MyExpxZipFile.AddFile(fn, "folder");
MyExpxZipFile.Save();
File.Delete(fn);
//here
lblExportStatus.Text = "Exporting Procedures...";
Application.DoEvents();
if (dvi.Procedures.Count > 0)
using (FileStream zipToOpen = new FileStream(MyExpZipFileName, FileMode.OpenOrCreate))
{
pbExportProcedure.Value = 0;
pbExportProcedure.Maximum = dvi.Procedures.Count;
lblExportProcedure.Text = pbExportProcedure.Maximum.ToString() + " Procedures";
foreach (ItemInfo ii in dvi.Procedures)
{
XmlDocument xd = new XmlDocument();
ExportItem(xd, ii, "procedure");
fn = string.Format(@"{0}\proc{1}.xml", PEIPath, pbExportProcedure.Value.ToString().PadLeft(4, '0'));
xd.Save(fn);
MyExpxZipFile.AddFile(fn, "procedures");
MyExpxZipFile.Save();
using (ZipArchive MyExpxZipFile = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
_ = MyExpxZipFile.CreateEntryFromFile(fn, $"folder/{Path.GetFileName(fn)}");
File.Delete(fn);
xd = null;
//here
lblExportStatus.Text = "Exporting Procedures...";
Application.DoEvents();
if (dvi.Procedures.Count > 0)
{
pbExportProcedure.Value = 0;
pbExportProcedure.Maximum = dvi.Procedures.Count;
lblExportProcedure.Text = pbExportProcedure.Maximum.ToString() + " Procedures";
foreach (ItemInfo ii in dvi.Procedures)
{
XmlDocument xd = new XmlDocument();
ExportItem(xd, ii, "procedure");
fn = string.Format(@"{0}\proc{1}.xml", PEIPath, pbExportProcedure.Value.ToString().PadLeft(4, '0'));
xd.Save(fn);
_ = MyExpxZipFile.CreateEntryFromFile(fn, $"procedures/{Path.GetFileName(fn)}");
File.Delete(fn);
xd = null;
}
}
}
}
}
@@ -1839,12 +1852,14 @@ namespace VEPROMS
//and handled/overridden in dlgExportEP.cs
}
protected virtual void SetROLocation(ref XmlElement xindivid, ROFSTLookup.rochild roc, RODbInfo rodb, bool isMulti)
protected virtual void SetEPEnhancedDocLinks(ref XmlElement xe, ItemInfo ii)
{
//do nothing - this will be for Electronic procedures only
//and handled/overridden in dlgExportEP.cs
}
protected virtual void SetEPEnhancedDocLinks(ref XmlElement xe, ItemInfo ii)
protected virtual void SetROLocation(ref XmlElement xindivid, ROFSTLookup.rochild roc, RODbInfo rodb, bool isMulti)
{
//do nothing - this will be for Electronic procedures only
//and handled/overridden in dlgExportEP.cs

View File

@@ -1245,6 +1245,7 @@ namespace VEPROMS
using (DlgPrintProcedure prnDlg = new DlgPrintProcedure(pi))
{
prnDlg.OverwritePDF = false; // turn off overwriting of PDFs B2025-041
prnDlg.SelectedSlave = args.UnitIndex;
prnDlg.MySessionInfo = MySessionInfo;
prnDlg.SetupForProcedure(); // Setup filename
@@ -1602,6 +1603,7 @@ namespace VEPROMS
{
using (DlgPrintProcedure prnDlg = new DlgPrintProcedure(pi))
{
prnDlg.OverwritePDF = false; // turn off overwriting of PDFs C2025-048.
prnDlg.SelectedSlave = pi.ProcedureConfig.SelectedSlave == 0 ? -1 : pi.ProcedureConfig.SelectedSlave; //added by jcb 20130718 to support create pdf button when multi-unit and user selects a unit
prnDlg.MySessionInfo = MySessionInfo;
prnDlg.SetupForProcedure(); // Setup filename

View File

@@ -839,7 +839,7 @@ namespace VEPROMS.CSLA.Library
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandTimeout = Database.DefaultTimeout;
cmd.CommandTimeout = 0;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "vesp_RofstHeaderFinalizeLoad";