Compare commits

..

5 Commits

10 changed files with 1104 additions and 685 deletions

Binary file not shown.

Binary file not shown.

View File

@ -164,6 +164,9 @@
<Compile Include="dlgCheckedOutProcedure.designer.cs"> <Compile Include="dlgCheckedOutProcedure.designer.cs">
<DependentUpon>dlgCheckedOutProcedure.cs</DependentUpon> <DependentUpon>dlgCheckedOutProcedure.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="dlgExportImportEP.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="dlgMSWordMessage.cs"> <Compile Include="dlgMSWordMessage.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>

View File

@ -29,6 +29,7 @@ namespace VEPROMS
} }
private bool _ConvertROsToTextDuringImport = false; private bool _ConvertROsToTextDuringImport = false;
private bool _ConvertROsAndTransitionsToText = false; // set to true when Approval creates an Export file private bool _ConvertROsAndTransitionsToText = false; // set to true when Approval creates an Export file
protected bool _ExportBothConvertedandNot = false; // set to true when Electronic Procedure export
// B2016-225 notify user when Transitions and/or ROs are converted to text // B2016-225 notify user when Transitions and/or ROs are converted to text
private bool _DidConvertTransitionsToText = false; private bool _DidConvertTransitionsToText = false;
@ -64,7 +65,7 @@ namespace VEPROMS
private FolderInfo MyFolder = null; private FolderInfo MyFolder = null;
private DocVersionInfo MyDocVersion = null; private DocVersionInfo MyDocVersion = null;
private ProcedureInfo MyProcedure = null; private ProcedureInfo MyProcedure = null;
private XmlAttribute AddAttribute(XmlDocument xd, string name, string value) protected XmlAttribute AddAttribute(XmlDocument xd, string name, string value)
{ {
XmlAttribute xa = xd.CreateAttribute(name); XmlAttribute xa = xd.CreateAttribute(name);
xa.InnerText = value; xa.InnerText = value;
@ -2423,6 +2424,14 @@ namespace VEPROMS
if (ii.ItemAnnotationCount > 0) if (ii.ItemAnnotationCount > 0)
foreach (AnnotationInfo ai in ii.ItemAnnotations) foreach (AnnotationInfo ai in ii.ItemAnnotations)
ExportAnnotation(xe, ai, "annotation"); ExportAnnotation(xe, ai, "annotation");
ExportEPAnnotationInfo(xe, ii);
}
protected virtual void ExportEPAnnotationInfo(XmlElement xe, ItemInfo ii)
{
//do nothing - this will be for Electronic procedures only
//and handled/overridden in dlgExportEP.cs
} }
private void ExportItemAudits(XmlElement xn, ItemInfo ii) private void ExportItemAudits(XmlElement xn, ItemInfo ii)
@ -2566,6 +2575,7 @@ namespace VEPROMS
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ci.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ci.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")));
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", ci.UserID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", ci.UserID.ToString()));
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "formatfilename", formatFileName)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "formatfilename", formatFileName));
if (_ExportBothConvertedandNot) xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "textwithlinks", ci.Text));
//content audits //content audits
ExportContentAudits(xe, ci); ExportContentAudits(xe, ci);
@ -2652,6 +2662,7 @@ namespace VEPROMS
MyWriter.WriteAttributeString("dts", ci.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("dts", ci.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"));
MyWriter.WriteAttributeString("userid", ci.UserID.ToString()); MyWriter.WriteAttributeString("userid", ci.UserID.ToString());
MyWriter.WriteAttributeString("formatfilename", formatFileName); MyWriter.WriteAttributeString("formatfilename", formatFileName);
if (_ExportBothConvertedandNot) MyWriter.WriteAttributeString("textwithlinks", ci.Text);
if (ci.ContentTransitionCount > 0) if (ci.ContentTransitionCount > 0)
foreach (TransitionInfo ti in ci.ContentTransitions) foreach (TransitionInfo ti in ci.ContentTransitions)
@ -2699,6 +2710,7 @@ namespace VEPROMS
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", gi.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", gi.Config));
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", gi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", gi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")));
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", gi.UserID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", gi.UserID.ToString()));
if (_ExportBothConvertedandNot) xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "datawithlinks", gi.Data));
//grid audits //grid audits
ExportGridAudits(xe, gi); ExportGridAudits(xe, gi);
@ -2758,6 +2770,7 @@ namespace VEPROMS
MyWriter.WriteAttributeString("config", gi.Config); MyWriter.WriteAttributeString("config", gi.Config);
MyWriter.WriteAttributeString("dts", gi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("dts", gi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"));
MyWriter.WriteAttributeString("userid", gi.UserID.ToString()); MyWriter.WriteAttributeString("userid", gi.UserID.ToString());
if (_ExportBothConvertedandNot) MyWriter.WriteAttributeString("datawithlinks", gi.Data);
MyWriter.WriteEndElement(); MyWriter.WriteEndElement();
} }
@ -2932,6 +2945,7 @@ namespace VEPROMS
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", di.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", di.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")));
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", di.UserID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", di.UserID.ToString()));
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "fileextension", di.FileExtension)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "fileextension", di.FileExtension));
if (_ExportBothConvertedandNot) xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "doccontentwithlinks", Convert.ToBase64String(di.DocContent)));
//document audits //document audits
ExportDocumentAudits(xe, di); ExportDocumentAudits(xe, di);
@ -2998,6 +3012,7 @@ namespace VEPROMS
MyWriter.WriteAttributeString("dts", di.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("dts", di.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"));
MyWriter.WriteAttributeString("userid", di.UserID.ToString()); MyWriter.WriteAttributeString("userid", di.UserID.ToString());
MyWriter.WriteAttributeString("fileextension", di.FileExtension); MyWriter.WriteAttributeString("fileextension", di.FileExtension);
if (_ExportBothConvertedandNot) MyWriter.WriteAttributeString("doccontentwithlinks", Convert.ToBase64String(di.DocContent));
MyWriter.WriteEndElement(); MyWriter.WriteEndElement();
} }

View File

@ -0,0 +1,202 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml;
using VEPROMS.CSLA.Library;
namespace VEPROMS
{
//C2025-024 Electronic Procedures - Phase 2 (PROMS XML output)
//class inherits from normal import/export form
//then adds additional functionality
public partial class dlgExportImportEP : dlgExportImport
{
private readonly AnnotationTypeInfo _AnnotationType;
private string multiseparator = ",";
private static Regex _ROAccPageTokenPattern = new Regex("[<][^<>-]+-[^<>]+[>]");
public dlgExportImportEP(string mode, FolderInfo folderInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId) : base(mode, folderInfo, myFrmVEPROMS, (E_UCFImportOptions) 0)
{
_AnnotationType = AnnotationTypeInfo.Get(annotationTypeId);
_ExportBothConvertedandNot = true;
DocReplace = new Dictionary<int, byte[]>();
FormClosed += OnClose;
Text = $"{mode} Electronic Procedure ({_AnnotationType.Name}) Dialog for {folderInfo.Name}";
}
public dlgExportImportEP(string mode, DocVersionInfo docVersionInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId) : base(mode, docVersionInfo, myFrmVEPROMS, (E_UCFImportOptions)0)
{
_AnnotationType = AnnotationTypeInfo.Get(annotationTypeId);
_ExportBothConvertedandNot = true;
DocReplace = new Dictionary<int, byte[]>();
FormClosed += OnClose;
Text = $"{mode} Electronic Procedure ({_AnnotationType.Name}) Dialog for {docVersionInfo.Name} of {docVersionInfo.MyFolder.Name}";
}
public dlgExportImportEP(string mode, ProcedureInfo procedureInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId) : base(mode, procedureInfo, myFrmVEPROMS, (E_UCFImportOptions)0)
{
_AnnotationType = AnnotationTypeInfo.Get(annotationTypeId);
_ExportBothConvertedandNot = true;
DocReplace = new Dictionary<int, byte[]>();
FormClosed += OnClose;
Text = $"{mode} Electronic Procedure ({_AnnotationType.Name}) Dialog for {procedureInfo.DisplayNumber}";
}
//Overridden function to handle export of EP data
protected override void ExportEPAnnotationInfo(XmlElement xe, ItemInfo ii)
{
//switch to handle customizations for different formats
switch (ii.ActiveFormat.PlantFormat.EPFormatFiles.Find(x => x.AnnotationTypeID == _AnnotationType.TypeID)?.Name)
{
default:
ExportEPAnnotationInfo_Default(xe, ii);
break;
}
}
//default export of EP Data
private void ExportEPAnnotationInfo_Default(XmlElement xe, ItemInfo ii)
{
//Add tab text to item
string steptab = Volian.Print.Library.PDFReport.BuildStepTab(ii);
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "StepTab", steptab));
//get first transition in item and add it as an xml element
if (ii.MyContent.ContentTransitionCount > 0)
{
TransitionInfo ct = ii.MyContent.ContentTransitions[0];
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "TransitionToItemID", ct.ToID.ToString()));
}
//export EP annotation details under an EPInfo node
if (ii.ItemAnnotations != null)
{
XmlElement xepinfo = xe.OwnerDocument.CreateElement("EPInfo");
EPFields myEPFields = ii.GetValidEPFields(_AnnotationType.TypeID);
ROFSTLookup lookup = ii.MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(ii.MyDocVersion);
//For each annotation in the item that is of the current EP Annotation type
foreach (var EPAnnotation in ii.ItemAnnotations.Where(x => x.TypeID == _AnnotationType.TypeID))
{
var EPAnnotationConfig = new AnnotationConfig(EPAnnotation.Config);
XmlElement xepdetails = xe.OwnerDocument.CreateElement("Details");
//include the annotation ID for reference
xepdetails.Attributes.SetNamedItem(AddAttribute(xepdetails.OwnerDocument, "AnnotationID", EPAnnotation.AnnotationID.ToString()));
//loop through each EP Field - name the xml elements the EP.name
foreach (EPField EP in myEPFields)
{
string val = EPAnnotationConfig.GetValue("EP", EP.name);
XmlElement xindivid = xe.OwnerDocument.CreateElement(EP.name);
//need to resolve ROs ROSingle, ROMulti, in text
//get values
//should we export blank?
//
switch (EP.type.ToLower())
{
case "text":
//for text, check if any embedded ROs
//if none, set the xml element to the text
//otherwise resolve the Ros
MatchCollection matches = _ROAccPageTokenPattern.Matches(val);
if (matches.Count == 0)
{
xindivid.InnerText = val;
}
else
{
//resolve ROs
//text ROs will replace the AccID key in the text
//for binary objects like images,
//we will keep the AccID in the text and output the binary as a separate child
//XML element with the same xml name as the AccID
foreach (Match m in matches)
{
ROFSTLookup.rochild roc = lookup.GetROChildByAccPageID(m.Groups[1].Value);
if (roc.type == 8) // Exclude replacing Images since are binary - for those, add a sub item
{
XmlElement xroid = xindivid.OwnerDocument.CreateElement(m.Groups[1].Value);
xroid.InnerText = roc.value;
xindivid.AppendChild(xroid);
}
else if (!string.IsNullOrEmpty(roc.value))
{
bool convertCaretToDeltaSymbol = (ii.ActiveSection != null) && ii.ActiveSection.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta;
string rocvalue = roc.value.Replace("`", "\xB0");
rocvalue = rocvalue.Replace("\xF8", "\xB0");
rocvalue = rocvalue.Replace("\x7F", "\x394"); //delta
if (convertCaretToDeltaSymbol) rocvalue = rocvalue.Replace("^", "\x394"); // delta
val = val.Replace($"<{m.Groups[1].Value}>", rocvalue);
}
}
xindivid.InnerText = val;
}
break;
case "rosingle":
//Get the output columns from the EPFormatFile
//set the "Item" nodes value = to those resolved items
//separated by multiseparator
XmlElement xindivid_rosingle = xindivid.OwnerDocument.CreateElement("Item");
xindivid_rosingle.Attributes.SetNamedItem(AddAttribute(xindivid_rosingle.OwnerDocument, "ROID", val));
List<string> ro_single_tmp = EP.getROValuesList(EPAnnotation, val);
xindivid_rosingle.InnerText = String.Join(multiseparator, ro_single_tmp.ToArray());
xindivid.AppendChild(xindivid_rosingle);
break;
case "romulti":
//Get the output columns from the EPFormatFile
//create an "Item" subnode for each selected RO
//set the nodes value = to those resolved items
//separated by multiseparator
foreach (string ival in val.Split(multiseparator.ToCharArray()))
{
XmlElement xindivid_romulti = xindivid.OwnerDocument.CreateElement("Item");
xindivid_romulti.Attributes.SetNamedItem(AddAttribute(xindivid_romulti.OwnerDocument, "ROID", ival));
List<string> ro_multi_tmp = EP.getROValuesList(EPAnnotation, ival);
xindivid_romulti.InnerText = String.Join(multiseparator, ro_multi_tmp.ToArray());
xindivid.AppendChild(xindivid_romulti);
}
break;
case "tableinput":
xindivid.InnerText = val;
break;
default:
xindivid.InnerText = val;
break;
}
xepdetails.AppendChild(xindivid);
}
xepinfo.AppendChild(xepdetails);
}
xe.AppendChild(xepinfo);
}
}
//clear objects to release memory
private void OnClose(object sender, EventArgs e)
{
DocReplace.Clear();
DocReplace = null;
}
}
}

View File

@ -709,6 +709,22 @@ namespace VEPROMS
{ {
int ownerid = MySessionInfo.CheckOutItem(fi.FolderID, CheckOutType.Session); int ownerid = MySessionInfo.CheckOutItem(fi.FolderID, CheckOutType.Session);
//C2025-024 Electronic Procedures - Phase 2 (PROMS XML output)
//form for exporting Electronic Procedures from FolderInfo
if (args.AnnotationTypeId > 0)
{
dlgExportImportEP dlg = new dlgExportImportEP(args.Index == 0 ? "Export" : "Import", fi, this, args.AnnotationTypeId);
dlg.ShowDialog(this);
MySessionInfo.CheckInItem(ownerid);
if (args.Index == 1 && dlg.MyNewFolder != null)
{
tv.AddNewNode(dlg.MyNewFolder);
}
}
else
{
dlgExportImport dlg = new dlgExportImport(args.Index == 0 ? "Export" : "Import", fi, this, (E_UCFImportOptions)Properties.Settings.Default.UCFImportOpt);//Added frmVEPROMS Parameter dlgExportImport dlg = new dlgExportImport(args.Index == 0 ? "Export" : "Import", fi, this, (E_UCFImportOptions)Properties.Settings.Default.UCFImportOpt);//Added frmVEPROMS Parameter
dlg.ShowDialog(this); dlg.ShowDialog(this);
@ -720,6 +736,7 @@ namespace VEPROMS
} }
} }
} }
}
if (dvi != null) if (dvi != null)
{ {
@ -742,6 +759,26 @@ namespace VEPROMS
int ownerid = MySessionInfo.CheckOutItem(dvi.VersionID, CheckOutType.DocVersion); int ownerid = MySessionInfo.CheckOutItem(dvi.VersionID, CheckOutType.DocVersion);
//C2025-024 Electronic Procedures - Phase 2 (PROMS XML output)
//form for exporting Electronic Procedures from DocVersionInfo
if (args.AnnotationTypeId > 0)
{
dlgExportImportEP dlg = new dlgExportImportEP(args.Index == 0 ? "Export" : "Import", dvi, this, args.AnnotationTypeId);
dlg.MyNewProcedure = null;
dlg.ExternalTransitionItem = null;
dlg.ShowDialog(this);
MySessionInfo.CheckInItem(ownerid);
if (dlg.MyNewProcedure != null)
tv.AddNewNode(dlg.MyNewProcedure);
if (dlg.ExternalTransitionItem != null)
tc.OpenItem(dlg.ExternalTransitionItem);
}
else
{
dlgExportImport dlg = new dlgExportImport("Import", dvi, this, (E_UCFImportOptions)Properties.Settings.Default.UCFImportOpt);//Added frmVEPROMS Parameter dlgExportImport dlg = new dlgExportImport("Import", dvi, this, (E_UCFImportOptions)Properties.Settings.Default.UCFImportOpt);//Added frmVEPROMS Parameter
dlg.MyNewProcedure = null; dlg.MyNewProcedure = null;
dlg.ExternalTransitionItem = null; dlg.ExternalTransitionItem = null;
@ -755,6 +792,8 @@ namespace VEPROMS
if (dlg.ExternalTransitionItem != null) if (dlg.ExternalTransitionItem != null)
tc.OpenItem(dlg.ExternalTransitionItem); tc.OpenItem(dlg.ExternalTransitionItem);
} }
}
} }
if (pi != null) if (pi != null)
@ -769,6 +808,19 @@ namespace VEPROMS
else else
{ {
int ownerid = MySessionInfo.CheckOutItem(pi.ItemID, CheckOutType.Procedure); int ownerid = MySessionInfo.CheckOutItem(pi.ItemID, CheckOutType.Procedure);
//C2025-024 Electronic Procedures - Phase 2 (PROMS XML output)
//form for exporting Electronic Procedures from ProcedureInfo
if (args.AnnotationTypeId > 0)
{
dlgExportImportEP dlg = new dlgExportImportEP("Export", pi, this, args.AnnotationTypeId);
dlg.ShowDialog(this);
MySessionInfo.CheckInItem(ownerid);
}
else
{
dlgExportImport dlg = new dlgExportImport("Export", pi, this, (E_UCFImportOptions)0);//Added frmVEPROMS Parameter dlgExportImport dlg = new dlgExportImport("Export", pi, this, (E_UCFImportOptions)0);//Added frmVEPROMS Parameter
dlg.ShowDialog(this); dlg.ShowDialog(this);
@ -776,6 +828,7 @@ namespace VEPROMS
} }
} }
} }
}
private void MakeDatabaseChanges() private void MakeDatabaseChanges()
{ {

View File

@ -524,7 +524,55 @@ namespace Volian.Controls.Library
ItemInfo secitm = (ItemInfo)cbTranSects.SelectedItem; ItemInfo secitm = (ItemInfo)cbTranSects.SelectedItem;
bool hasMetaSubs = secitm.IsSection && secitm.Sections != null && secitm.Sections.Count > 0; bool hasMetaSubs = secitm.IsSection && secitm.Sections != null && secitm.Sections.Count > 0;
bool editSteps = !hasMetaSubs || (secitm.MyConfig is SectionConfig && (secitm.MyConfig as SectionConfig).SubSection_Edit == "Y"); bool editSteps = !hasMetaSubs || (secitm.MyConfig is SectionConfig && (secitm.MyConfig as SectionConfig).SubSection_Edit == "Y");
if (!editSteps) return; if (!editSteps)
{
if (secitm.Sections != null)
{
// if the transition to point is a section or procedure, just return
if (startitm.MyContent.Type < 20000) return;
groupPanelTranstionSteps.Style.BackColor = Color.Cornsilk;
// For the tree view, use parent, unless already at HLS. If at HLS, use this level.
//ItemInfo selitm2 = startitm.MyHLS;
ItemInfo selSubSec = secitm.Sections[0];
// The commented out code below is for displaying the steps from the first sub-section B2025-035
//ItemInfo subSelStep = selSubSec.Steps[0];
//E_TransUI etm2 = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[listBoxTranFmt.SelectedIndex].TransUI;
//if (subSelStep.IsInRNO)
// startitm = subSelStep.FirstSibling; // if in RNO tree, start out with HLS
//else
// startitm = subSelStep != null ? subSelStep.FirstSibling : startitm.FirstSibling;
// B2025-035
ItemInfo subSelStep = secitm.Sections[0];
E_TransUI etm2 = (E_TransUI)_CurItemFrom.ActiveFormat.PlantFormat.FormatData.TransData.TransTypeList[listBoxTranFmt.SelectedIndex].TransUI;
if (subSelStep.IsInRNO)
startitm = subSelStep.FirstSibling; // if in RNO tree, start out with HLS
else
startitm = subSelStep != null ? subSelStep.FirstSibling : startitm.FirstSibling;
// B2025-035
bool setsel2 = false;
while (startitm != null)
{
VETreeNode tvn = new VETreeNode(startitm, false);
tvn.Tag = startitm;
int active = this.tvTran.Nodes.Add(tvn);
if (subSelStep != null && startitm.ItemID == subSelStep.ItemID)
{
tvTran.SelectedNode = tvTran.Nodes[active];
setsel2 = true;
}
startitm = startitm.GetNext();
}
if (!setsel2) tvTran.SelectedNode = tvTran.Nodes[0];
tvTran.BeforeExpand += new TreeViewCancelEventHandler(tvTran_BeforeExpand);
// bug fix. TreeView needs the next two lines to properly display the bottom node. jsj 01/08/2010
tvTran.ItemHeight++;
tvTran.ItemHeight--;
}
return;
}
// if the transition to point is a section or procedure, just return // if the transition to point is a section or procedure, just return
if (startitm.MyContent.Type < 20000) return; if (startitm.MyContent.Type < 20000) return;
@ -934,6 +982,12 @@ namespace Volian.Controls.Library
// a different section was selected, if step section, update step list, otherwise, empty // a different section was selected, if step section, update step list, otherwise, empty
// it & disable. // it & disable.
ItemInfo secitm = (ItemInfo)cbTranSects.SelectedItem; ItemInfo secitm = (ItemInfo)cbTranSects.SelectedItem;
//if (secitm.IsStepSection)
//{
// cbTranSects.SelectedItem.Sections[0];
//}
if (!secitm.IsStepSection) if (!secitm.IsStepSection)
{ {
tvTran.Nodes.Clear(); tvTran.Nodes.Clear();

View File

@ -152,6 +152,15 @@ namespace Volian.Controls.Library
get { return _Index; } get { return _Index; }
set { _Index = value; } set { _Index = value; }
} }
//C2025-024 Electronic Procedures - Phase 2 (PROMS XML output)
//AnnotationType that would be doing an export for
private int _AnnotationTypeId = -1;
public int AnnotationTypeId
{
get { return _AnnotationTypeId; }
set { _AnnotationTypeId = value; }
}
//jcb multiunit //jcb multiunit
private string _Unit; private string _Unit;
public string Unit public string Unit
@ -179,6 +188,13 @@ namespace Volian.Controls.Library
_Destination = destination; _Destination = destination;
_Index = index; _Index = index;
} }
public vlnTreeEventArgs(TreeNode node, TreeNode destination, int index, int annTypeId)
{
_Node = node;
_Destination = destination;
_Index = index;
_AnnotationTypeId = annTypeId;
}
//jcb multiunit //jcb multiunit
public vlnTreeEventArgs(TreeNode node, TreeNode destination, int index, string unit, int unitIndex) public vlnTreeEventArgs(TreeNode node, TreeNode destination, int index, string unit, int unitIndex)
{ {
@ -188,6 +204,15 @@ namespace Volian.Controls.Library
_Unit = unit; _Unit = unit;
_UnitIndex = unitIndex; _UnitIndex = unitIndex;
} }
public vlnTreeEventArgs(TreeNode node, TreeNode destination, int index, string unit, int unitIndex, int annTypeId)
{
_Node = node;
_Destination = destination;
_Index = index;
_Unit = unit;
_UnitIndex = unitIndex;
_AnnotationTypeId = annTypeId;
}
//end jcb multiunit //end jcb multiunit
#endregion #endregion
public override string ToString() public override string ToString()
@ -711,7 +736,10 @@ namespace Volian.Controls.Library
if (ui.IsAdministrator() || ui.IsSetAdministrator(fi))// && fi.MyParent == null) //VEPROMS level if (ui.IsAdministrator() || ui.IsSetAdministrator(fi))// && fi.MyParent == null) //VEPROMS level
{ {
if (fi.HasWorkingDraft) if (fi.HasWorkingDraft)
{
cm.MenuItems.Add("Export Procedure Set", new EventHandler(mi_Click)); cm.MenuItems.Add("Export Procedure Set", new EventHandler(mi_Click));
//AddEPExport(cm.MenuItems, 0, null);
}
else else
cm.MenuItems.Add("Import Procedure Set", new EventHandler(mi_Click)); cm.MenuItems.Add("Import Procedure Set", new EventHandler(mi_Click));
if (DoSpecificInfo) if (DoSpecificInfo)
@ -847,6 +875,7 @@ namespace Volian.Controls.Library
if (ui.IsAdministrator() || ui.IsSetAdministrator(pri.MyDocVersion)) if (ui.IsAdministrator() || ui.IsSetAdministrator(pri.MyDocVersion))
{ {
cm.MenuItems.Add("Export Procedure", mi_Click); cm.MenuItems.Add("Export Procedure", mi_Click);
AddEPExport(cm.MenuItems, pri.MyDocVersion.MultiUnitCount, pri.MyDocVersion.UnitNames);
} }
if (ui.IsAdministrator() || ui.IsSetAdministrator(pri.MyDocVersion) || ui.IsWriter(pri.MyDocVersion)) if (ui.IsAdministrator() || ui.IsSetAdministrator(pri.MyDocVersion) || ui.IsWriter(pri.MyDocVersion))
{ {
@ -1359,6 +1388,52 @@ namespace Volian.Controls.Library
} }
} }
//C2025-024 Electronic Procedures - Phase 2 (PROMS XML output)
// Add context menu for exporting Electronic Procedures
// if has an Electronic procedure
// then loop through and add an Export for each EP Viewer
private void AddEPExport(Menu.MenuItemCollection menuItems, int MultiUnitCount, string[] UnitNames)
{
//get EP Annotations
AnnotationTypeInfoList annotations = AnnotationTypeInfoList.Get();
List<AnnotationTypeInfo> epAnnotations = new List<AnnotationTypeInfo>();
foreach (AnnotationTypeInfo tmp in annotations)
{
if (tmp.IsEPAnnotationType) epAnnotations.Add(tmp);
}
if (epAnnotations.Count == 0) return; // no Electronic Procedures
//add outer menu
MenuItem mi = menuItems.Add("Electronic Procedure Viewer Export");
foreach (AnnotationTypeInfo epAnn in epAnnotations)
{
//Add item for each individual EP Viewer
MenuItem mv = mi.MenuItems.Add(epAnn.Name);
//tag will be of format:
//{EP Annotation Type ID},{Unit}
//if not multi-unit, unit will be zero.
if (MultiUnitCount > 1)
{
//if multi-unit, add menu item for each unit
int k = 0;
foreach (string s in UnitNames)
{
k++;
MenuItem multiunit_mv = mv.MenuItems.Add(s);
multiunit_mv.Tag = $"{epAnn.TypeID},{k}";
multiunit_mv.Click += new EventHandler(miEP_Click);
}
}
else
{
mv.Tag = $"{epAnn.TypeID},0";
mv.Click += new EventHandler(miEP_Click);
}
}
}
private void AddApprovedRevisionsMultiUnit(Menu.MenuItemCollection menuItemCollection, ProcedureInfo pri) private void AddApprovedRevisionsMultiUnit(Menu.MenuItemCollection menuItemCollection, ProcedureInfo pri)
{ {
_currentPri = pri; _currentPri = pri;
@ -2255,6 +2330,23 @@ namespace Volian.Controls.Library
break; break;
} }
} }
//C2025-024 Electronic Procedures - Phase 2 (PROMS XML output)
// Handles clicking of items in the context menu
// for exporting Electronic Procedures
// tag will be of format:
// {EP Annotation Type ID},{Unit}
// if not multi-unit, unit will be zero.
void miEP_Click(object sender, EventArgs e)
{
MenuItem mi = sender as MenuItem;
int annTypeid = int.Parse(((string)mi.Tag).Split(',')[0]);
int unit = int.Parse(((string)mi.Tag).Split(',')[1]);
if (unit == 0)
OnExportImportProcedureSets(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, annTypeid));
else
OnExportImportProcedureSets(this, new vlnTreeEventArgs(SelectedNode as VETreeNode, null, 0, "", unit, annTypeid));
}
private bool _doingCollapseNode = false; // B2016-058 when collapse is done, it always calls the drag node event which doesn't appear to be needed private bool _doingCollapseNode = false; // B2016-058 when collapse is done, it always calls the drag node event which doesn't appear to be needed
private void CollapseProcedures() private void CollapseProcedures()
{ {

View File

@ -1688,7 +1688,7 @@ namespace Volian.Print.Library
System.Windows.Forms.MessageBox.Show(msg.ToString(), "Error during PDF creation for search:", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation); System.Windows.Forms.MessageBox.Show(msg.ToString(), "Error during PDF creation for search:", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
} }
private static string BuildStepTab(ItemInfo item) public static string BuildStepTab(ItemInfo item)
{ {
if (item == null) if (item == null)
return string.Empty; return string.Empty;