Compare commits
36 Commits
C2025-039_
...
Developmen
Author | SHA1 | Date | |
---|---|---|---|
adf1120436 | |||
7879391de0 | |||
11ba9ea418 | |||
0fe84ca17c | |||
1009ca5111 | |||
2c973fb0be | |||
dba1f4e71c | |||
46fe124fe1 | |||
50688d7d8a | |||
a7396e3c4a | |||
41e969f79e | |||
7b3f78f745 | |||
14bc171246 | |||
a584c0751e | |||
3d7528e069 | |||
58cc75ef71 | |||
b5a9462e95 | |||
1bc421ac6d | |||
ad0d091b49 | |||
22de686a44 | |||
3e7eb09758 | |||
28c681a562 | |||
44025c3978 | |||
8c32d18aec | |||
20c31153de | |||
ecb9a805e5 | |||
0577acad93 | |||
d7f83fa4d4 | |||
4c4f4d52d2 | |||
0bf9025c0d | |||
2784b57a05 | |||
b9fc9748c7 | |||
ec25f6426a | |||
00283b4f28 | |||
ec8e4c36a4 | |||
92522b1229 |
@@ -180,6 +180,7 @@
|
||||
<Content Include="fmtall\CPL_03all.xml" />
|
||||
<Content Include="fmtall\CPSAMGDataall.xml" />
|
||||
<Content Include="fmtall\CPSAMGDEVall.xml" />
|
||||
<Content Include="fmtall\EPTSTBCK1all.xml" />
|
||||
<Content Include="fmtall\EPTST1all.xml" />
|
||||
<Content Include="fmtall\CWEall.xml" />
|
||||
<Content Include="fmtall\CWEDEVall.xml" />
|
||||
|
Binary file not shown.
BIN
PROMS/Formats/fmtall/EPTSTBCK1all.xml
Normal file
BIN
PROMS/Formats/fmtall/EPTSTBCK1all.xml
Normal file
Binary file not shown.
@@ -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
|
||||
|
@@ -13635,8 +13635,8 @@ WITH EXECUTE AS OWNER
|
||||
AS
|
||||
BEGIN TRY -- Try Block
|
||||
BEGIN TRANSACTION
|
||||
Update Contents set Text = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Text,'\emdash','\u8209?'),'\endash','\u8209?'),'\u8213?','\u8209?'),'\u8212?','\u8209?'),'\u8211?','\u8209?'),'\u8210?','\u8209?'),'\u8208?','\u8209?')
|
||||
where Text Like '%\u8208?%' or Text Like '%\u8210?%' or Text Like '%\u8211?%' or Text Like '%\u8212?%' or Text Like '%\u8213?%' or Text Like '%\endash%' or Text Like '%\emdash%'
|
||||
Update Contents set Text = Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Text,'\emdash','\u8209?'),'\endash','\u8209?'),'\u8213?','\u8209?'),'\u8212?','\u8209?'),'\u8211?','\u8209?'),'\u8210?','\u8209?'),'\u8208?','\u8209?'),NCHAR(8209),'\u8209?')
|
||||
where Text Like '%\u8208?%' or Text Like '%\u8210?%' or Text Like '%\u8211?%' or Text Like '%\u8212?%' or Text Like '%\u8213?%' or Text Like '%\endash%' or Text Like '%\emdash%'or Text Like '%' + NCHAR(8209) + '%' IF( @@TRANCOUNT > 0 ) COMMIT
|
||||
IF( @@TRANCOUNT > 0 ) COMMIT
|
||||
END TRY
|
||||
BEGIN CATCH -- Catch Block
|
||||
@@ -17320,7 +17320,7 @@ GO
|
||||
[RofstID] [int] NOT NULL,
|
||||
[roid] [varchar](50) NOT NULL,
|
||||
[value] [varchar](max) NOT NULL,
|
||||
[AccPageID] [varchar](max) NULL,
|
||||
[AccPageID] [varchar](100) NULL,
|
||||
CONSTRAINT [PK_RofstDefaultValue] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[RofstID] ASC,
|
||||
@@ -24293,6 +24293,56 @@ Go
|
||||
--- end changes for:
|
||||
---C2025-023 - Electronic Procedures - Modifications to PROMS
|
||||
|
||||
/*
|
||||
==========================================================================================================
|
||||
Begin: C2025-045: Improve Performance loading procedures with Alarms
|
||||
==========================================================================================================
|
||||
*/
|
||||
|
||||
IF Exists(SELECT 1 from information_schema.columns where character_maximum_length=-1 and column_name = 'AccPageID' and table_name = 'RofstDefaultValue')
|
||||
Begin
|
||||
ALTER TABLE RofstDefaultValue ALTER COLUMN AccPageID varchar(100)
|
||||
END
|
||||
GO
|
||||
|
||||
IF (@@Error = 0) PRINT 'Updating size of RofstDefaultValue.AccPageID Succeeded'
|
||||
ELSE PRINT 'Updating size of RofstDefaultValue.AccPageID Failed to Execute'
|
||||
GO
|
||||
|
||||
EXEC sp_refreshview [dbo.vwRofstData_RofstDefaultValues]
|
||||
EXEC sp_refreshview [dbo.vwRofstData_RofstBaseRoids]
|
||||
GO
|
||||
|
||||
IF (@@Error = 0) PRINT 'Refreshing views: (vwRofstData_RofstDefaultValues,vwRofstData_RofstBaseRoids) Succeeded'
|
||||
ELSE PRINT 'Refreshing views: (vwRofstData_RofstDefaultValues,vwRofstData_RofstBaseRoids) Failed to Execute'
|
||||
GO
|
||||
|
||||
IF NOT EXISTS (SELECT * FROM dbo.sysindexes WHERE name = 'IX_RofstDefaultValue_RofstID_AccPageID')
|
||||
BEGIN
|
||||
CREATE NONCLUSTERED INDEX [IX_RofstDefaultValue_RofstID_AccPageID] ON [dbo].[RofstDefaultValue]
|
||||
(
|
||||
[RofstID] ASC,
|
||||
[AccPageID] ASC
|
||||
)
|
||||
INCLUDE
|
||||
(
|
||||
[roid]
|
||||
,[value]
|
||||
)
|
||||
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
|
||||
END
|
||||
GO
|
||||
|
||||
IF (@@Error = 0) PRINT 'Adding Index IX_RofstDefaultValue_RofstID_AccPageID Succeeded'
|
||||
ELSE PRINT 'Adding Index IX_RofstDefaultValue_RofstID_AccPageID Failed to Execute'
|
||||
GO
|
||||
|
||||
/*
|
||||
==========================================================================================================
|
||||
End: C2025-045: Improve Performance loading procedures with Alarms
|
||||
==========================================================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
---------------------------------------------------------------------------
|
||||
@@ -24327,8 +24377,8 @@ BEGIN TRY -- Try Block
|
||||
DECLARE @RevDate varchar(255)
|
||||
DECLARE @RevDescription varchar(255)
|
||||
|
||||
set @RevDate = '07/31/2025 10:30 AM'
|
||||
set @RevDescription = 'SQL Optimization'
|
||||
set @RevDate = '08/13/2025 8:07 AM'
|
||||
set @RevDescription = 'Improve Performance loading procedures with Alarms'
|
||||
|
||||
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
|
||||
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
|
||||
|
@@ -175,6 +175,9 @@
|
||||
<Compile Include="dlgCheckedOutProcedure.designer.cs">
|
||||
<DependentUpon>dlgCheckedOutProcedure.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="dlgExportImportEP.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="dlgMSWordMessage.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
|
@@ -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");
|
||||
|
File diff suppressed because it is too large
Load Diff
347
PROMS/VEPROMS User Interface/dlgExportImportEP.cs
Normal file
347
PROMS/VEPROMS User Interface/dlgExportImportEP.cs
Normal file
@@ -0,0 +1,347 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
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
|
||||
#pragma warning disable S101 // Types should be named in PascalCase
|
||||
public partial class dlgExportImportEP : dlgExportImport
|
||||
#pragma warning restore S101 // Types should be named in PascalCase
|
||||
{
|
||||
private readonly AnnotationTypeInfo _AnnotationType;
|
||||
private readonly string multiseparator = ",";
|
||||
|
||||
private static Regex _ROAccPageTokenPattern = new Regex("[<][^<>-]+-[^<>]+[>]");
|
||||
|
||||
public dlgExportImportEP(string mode, FolderInfo folderInfo, frmVEPROMS myFrmVEPROMS, int annotationTypeId, int unitIndex = 0) : base(mode, folderInfo, myFrmVEPROMS, (E_UCFImportOptions)0, unitIndex)
|
||||
{
|
||||
_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, int unitIndex = 0) : base(mode, docVersionInfo, myFrmVEPROMS, (E_UCFImportOptions)0, unitIndex)
|
||||
{
|
||||
_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, int unitIndex = 0) : base(mode, procedureInfo, myFrmVEPROMS, (E_UCFImportOptions)0, unitIndex)
|
||||
{
|
||||
_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)
|
||||
{
|
||||
if (_UnitIndex > 0)
|
||||
{
|
||||
ii.MyDocVersion.DocVersionConfig.SelectedSlave = _UnitIndex;
|
||||
ii.MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave = _UnitIndex;
|
||||
}
|
||||
|
||||
//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;
|
||||
}
|
||||
|
||||
ii.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
|
||||
ii.MyProcedure.MyDocVersion.DocVersionConfig.SelectedSlave = 0;
|
||||
|
||||
}
|
||||
|
||||
//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));
|
||||
|
||||
//Add db sequence to item
|
||||
string dbsequence = dbSeq(ii);
|
||||
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dbsequence", dbsequence));
|
||||
|
||||
//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()));
|
||||
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "TransitionTodbsequence", dbSeq(ct.ToID)));
|
||||
}
|
||||
|
||||
//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);
|
||||
bool epexportblank = ii.EPexportblank(_AnnotationType.TypeID); //should blank xml elements export?
|
||||
|
||||
//grab the current RO db so will know location of RO files and default graphics ext.
|
||||
using (RODbInfo myRODB = (RODbInfoList.Get()).FirstOrDefault(x => x.RODbID == ii.MyDocVersion.DocVersionAssociations[0].MyROFst.RODbID))
|
||||
{
|
||||
//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);
|
||||
|
||||
if (epexportblank || !string.IsNullOrEmpty(val))
|
||||
{
|
||||
|
||||
if (_UnitIndex != 0)
|
||||
{
|
||||
val = DisplayText.ResolveUnitSpecific(ii.MyDocVersion, val);
|
||||
}
|
||||
|
||||
XmlElement xindivid = xe.OwnerDocument.CreateElement(EP.name);
|
||||
|
||||
//need to resolve ROs ROSingle, ROMulti, in text
|
||||
//get values
|
||||
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[0].Value);
|
||||
|
||||
// Exclude replacing Images since are binary - for those, add a sub item
|
||||
if (Enumerable.Range(8, 15).Contains(roc.type))
|
||||
{
|
||||
xindivid.InnerText = val;
|
||||
|
||||
XmlElement xroid = AddGraphic(xindivid, m.Groups[0].Value, roc, myRODB, roc.type != 8);
|
||||
|
||||
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[0].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));
|
||||
|
||||
//add values specified in EP input list
|
||||
List<string> ro_single_tmp = EP.getROValuesList(EPAnnotation, val);
|
||||
xindivid_rosingle.InnerText = String.Join(multiseparator, ro_single_tmp.ToArray());
|
||||
|
||||
//if image, add location and binary of image
|
||||
// - images are type 8
|
||||
// but if multiple return values could combine
|
||||
// for example an text (1) + image (8) would be 9
|
||||
ROFSTLookup.rochild roc_single = lookup.GetRoChild(val);
|
||||
if (Enumerable.Range(8, 15).Contains(roc_single.type))
|
||||
{
|
||||
XmlElement xroid = AddGraphic(xindivid, val, roc_single, myRODB, roc_single.type != 8);
|
||||
xindivid_rosingle.AppendChild(xroid);
|
||||
}
|
||||
|
||||
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));
|
||||
|
||||
//add values specified in EP input list
|
||||
List<string> ro_multi_tmp = EP.getROValuesList(EPAnnotation, ival);
|
||||
xindivid_romulti.InnerText = String.Join(multiseparator, ro_multi_tmp.ToArray());
|
||||
|
||||
//if image, add location and binary of image
|
||||
// - images are type 8
|
||||
// but if multiple return values could combine
|
||||
// for example an text (1) + image (8) would be 9
|
||||
ROFSTLookup.rochild roc_multi = lookup.GetRoChild(ival);
|
||||
if (Enumerable.Range(8, 15).Contains(roc_multi.type))
|
||||
{
|
||||
XmlElement xroid = AddGraphic(xindivid, ival, roc_multi, myRODB, roc_multi.type != 8);
|
||||
xindivid_romulti.AppendChild(xroid);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//return a db sequence string from an Item ID
|
||||
private string dbSeq(int itemID)
|
||||
{
|
||||
using (ItemInfo ii = ItemInfo.Get(itemID))
|
||||
{
|
||||
return dbSeq(ii);
|
||||
}
|
||||
}
|
||||
|
||||
//return a db sequence string from an ItemInfo
|
||||
private string dbSeq(ItemInfo ii) => $"{((FolderInfo)ii.MyDocVersion.ActiveParent).Name}:{ii.MyProcedure.DisplayNumber} {ii.MyProcedure.DisplayText}:{ii.DBSequence}";
|
||||
|
||||
//For Exporting an RO that is an image
|
||||
//returns the Location and FileName of the RO Image
|
||||
private string GetROImageFileLocation(ROFSTLookup.rochild roc, RODbInfo rodb, bool isMulti)
|
||||
{
|
||||
string rodbpath = rodb.FolderPath;
|
||||
|
||||
string rocval = roc.value;
|
||||
if (rocval == null) rocval = Array.Find(roc.children, x => x.value.Contains('.')).value;
|
||||
|
||||
if (rocval == null) return "";
|
||||
string imgname;
|
||||
if (isMulti)
|
||||
{
|
||||
imgname = rocval.Substring(rocval.IndexOf(' ') + 1, rocval.IndexOf("\r\n") - rocval.IndexOf(' ') - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
imgname = rocval.Substring(0, rocval.IndexOf('\n'));
|
||||
}
|
||||
int thedot = imgname.LastIndexOf('.');
|
||||
string fname = imgname;
|
||||
if (thedot == -1 || (thedot != (imgname.Length - 4)))
|
||||
{
|
||||
RODbConfig roDbCfg = new RODbConfig(rodb.Config);
|
||||
fname += string.Format(".{0}", roDbCfg.GetDefaultGraphicExtension());
|
||||
}
|
||||
|
||||
string imgfile = Path.Combine(rodbpath, fname);
|
||||
return imgfile;
|
||||
}
|
||||
|
||||
//For Exporting an RO that is an image
|
||||
//returns an xmlElement
|
||||
// - that is a child to xindivid
|
||||
// - that has a name of Name
|
||||
// - that has a value of the binary representation of the image
|
||||
// - that has an attribute designating the location of the image file
|
||||
private XmlElement AddGraphic(XmlElement xindivid, string Name, ROFSTLookup.rochild roc, RODbInfo rodb, bool isMulti)
|
||||
{
|
||||
Name = Name.Replace("<", "").Replace(">", "");
|
||||
|
||||
XmlElement xroid = xindivid.OwnerDocument.CreateElement(Name);
|
||||
|
||||
string imgfile = GetROImageFileLocation(roc, rodb, isMulti);
|
||||
if (string.IsNullOrEmpty(imgfile)) return xroid;
|
||||
xroid.Attributes.SetNamedItem(AddAttribute(xroid.OwnerDocument, "Location", imgfile));
|
||||
|
||||
if (File.Exists(imgfile))
|
||||
{
|
||||
using (FileStream fsIn = new FileStream(imgfile, FileMode.Open, FileAccess.Read, FileShare.Read))
|
||||
{
|
||||
// Create an instance of StreamReader that can read characters from the FileStream.
|
||||
using (BinaryReader r = new BinaryReader(fsIn))
|
||||
xroid.InnerText = Encoding.Default.GetString(r.ReadBytes((int)fsIn.Length));
|
||||
}
|
||||
}
|
||||
|
||||
return xroid;
|
||||
}
|
||||
|
||||
//overridden - used to set the RO location for RO Images that are not in annotations
|
||||
protected override void SetROLocation(ref XmlElement xindivid, ROFSTLookup.rochild roc, RODbInfo rodb, bool isMulti)
|
||||
{
|
||||
string imgfile = GetROImageFileLocation(roc, rodb, isMulti);
|
||||
if (!string.IsNullOrEmpty(imgfile)) xindivid.Attributes.SetNamedItem(AddAttribute(xindivid.OwnerDocument, "Location", imgfile));
|
||||
}
|
||||
|
||||
//overridden - used to set specific enhanced doc info
|
||||
protected override void SetEPEnhancedDocLinks(ref XmlElement xe, ItemInfo ii)
|
||||
{
|
||||
EnhancedDocuments eds = ii.GetMyEnhancedDocuments();
|
||||
|
||||
if (eds != null && eds.Count == 1)
|
||||
{
|
||||
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "EnhancedDocType", eds[0].Type.ToString()));
|
||||
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "EnhancedDocToItemID", eds[0].ItemID.ToString()));
|
||||
xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "EnhancedDocToDbSeq", dbSeq(eds[0].ItemID)));
|
||||
}
|
||||
}
|
||||
|
||||
//clear objects to release memory
|
||||
private void OnClose(object sender, EventArgs e)
|
||||
{
|
||||
DocReplace.Clear();
|
||||
DocReplace = null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@@ -708,6 +708,22 @@ namespace VEPROMS
|
||||
{
|
||||
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, args.UnitIndex);
|
||||
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
|
||||
dlg.ShowDialog(this);
|
||||
|
||||
@@ -719,6 +735,7 @@ namespace VEPROMS
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dvi != null)
|
||||
{
|
||||
@@ -741,6 +758,26 @@ namespace VEPROMS
|
||||
|
||||
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, args.UnitIndex);
|
||||
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
|
||||
dlg.MyNewProcedure = null;
|
||||
dlg.ExternalTransitionItem = null;
|
||||
@@ -754,6 +791,8 @@ namespace VEPROMS
|
||||
if (dlg.ExternalTransitionItem != null)
|
||||
tc.OpenItem(dlg.ExternalTransitionItem);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (pi != null)
|
||||
@@ -768,6 +807,19 @@ namespace VEPROMS
|
||||
else
|
||||
{
|
||||
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, args.UnitIndex);
|
||||
dlg.ShowDialog(this);
|
||||
|
||||
MySessionInfo.CheckInItem(ownerid);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
dlgExportImport dlg = new dlgExportImport("Export", pi, this, (E_UCFImportOptions)0);//Added frmVEPROMS Parameter
|
||||
dlg.ShowDialog(this);
|
||||
|
||||
@@ -775,6 +827,7 @@ namespace VEPROMS
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void MakeDatabaseChanges()
|
||||
{
|
||||
@@ -1486,9 +1539,11 @@ namespace VEPROMS
|
||||
// and if they are not the same, use the CurrentItem from the main frmVEPROMS.
|
||||
ProcedureInfo piThis = null;
|
||||
if (_CurrentItem != null) piThis = _CurrentItem.MyProcedure;
|
||||
|
||||
ProcedureInfo pi = args.Proc as ProcedureInfo;
|
||||
if (args.OringFlg == 1) // B2025-036 split screen print issue. if oringFlg == 1 the ctrl-p keys was pressed.
|
||||
{
|
||||
if (piThis != null && pi.ItemID != piThis.ItemID) pi = piThis;
|
||||
}
|
||||
|
||||
// Check if Procedure Info is null
|
||||
if (pi == null) return;
|
||||
@@ -1530,8 +1585,11 @@ namespace VEPROMS
|
||||
if (_CurrentItem != null) piThis = _CurrentItem.MyProcedure;
|
||||
|
||||
ProcedureInfo pi = args.Proc as ProcedureInfo;
|
||||
if (piThis != null && pi.ItemID != piThis.ItemID) pi = piThis;
|
||||
|
||||
if (args.OringFlg == 1) // B2025-036 split screen print issue. if oringFlg == 1 the ctrl-p keys was pressed.
|
||||
{
|
||||
if (piThis != null && pi.ItemID != piThis.ItemID) pi = piThis;
|
||||
}
|
||||
// Check if Procedure Info is null
|
||||
if (pi == null) return;
|
||||
|
||||
@@ -1544,6 +1602,7 @@ namespace VEPROMS
|
||||
{
|
||||
using (DlgPrintProcedure prnDlg = new DlgPrintProcedure(pi))
|
||||
{
|
||||
prnDlg.OverwritePDF = false; // turn off overwriting of PDFs.
|
||||
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
|
||||
|
@@ -931,7 +931,7 @@ namespace VEPROMS.CSLA.Library
|
||||
else // B2018-043 Eliminate infinite loop for invalid transition structure
|
||||
{
|
||||
// Add annotation for Invalid Transition
|
||||
AddInvalidTransitionAnnotation(itemInfo,"Invalid Transition Format");
|
||||
AddInvalidTransitionAnnotation(itemInfo, "Invalid Transition Format");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -984,16 +984,16 @@ namespace VEPROMS.CSLA.Library
|
||||
ContentInfo myContent = itemInfo.MyContent;
|
||||
string txt = myContent.Text;
|
||||
string regDelete = @"(\\v |)\<START\]\#Link\:Transition(|Range)\:[0-9]+ [0-9]+ [0-9]+(| [0-9]+)\[END\>(\\v0 |)";
|
||||
string txt2=txt;
|
||||
string txt2 = txt;
|
||||
|
||||
do{
|
||||
do {
|
||||
txt = txt2;
|
||||
txt2 = Regex.Replace(txt, regDelete, "");
|
||||
} while(txt2 != txt);
|
||||
} while (txt2 != txt);
|
||||
|
||||
if(txt2 != myContent.Text)
|
||||
if (txt2 != myContent.Text)
|
||||
{
|
||||
using(Content tmp = myContent.Get())
|
||||
using (Content tmp = myContent.Get())
|
||||
{
|
||||
tmp.Text = txt2;
|
||||
tmp.Save();
|
||||
@@ -1276,7 +1276,7 @@ namespace VEPROMS.CSLA.Library
|
||||
// for supplemental information, bulleted tabs need to be included in the tab. The 'isletterordigit' should not occur for supinfo items -
|
||||
// and this includes the parent of the supinfo since that is the tab used for supinfo concatenated with its parent. (B2017-120)
|
||||
// // B2020-154: Added check for the tab to start with '(', tabs that started with this were not included in the combined tab
|
||||
if (thisTab != null && thisTab != "" && (!char.IsLetterOrDigit(thisTab[0]) && thisTab[0] != '(') && !vcbHeaderCheck && !itemInfo.IsInSupInfo && (itemInfo.SupInfos == null || itemInfo.SupInfos.Count <= 0 )) return pTab;
|
||||
if (thisTab != null && thisTab != "" && (!char.IsLetterOrDigit(thisTab[0]) && thisTab[0] != '(') && !vcbHeaderCheck && !itemInfo.IsInSupInfo && (itemInfo.SupInfos == null || itemInfo.SupInfos.Count <= 0)) return pTab;
|
||||
if (itemInfo.FormatStepData.NumberWithLevel) pTab = itemInfo.MyHLS.MyTab.CleanText.Trim();
|
||||
// if the parent tab ends with a alphanumeric and this tab is alphanumeric, add a '.' to separate them
|
||||
// also, include use the separator for bullets if doing the supplemental information tab (B2017-120)
|
||||
@@ -1445,7 +1445,7 @@ namespace VEPROMS.CSLA.Library
|
||||
if (MyContent.MyEntry != null && MyContent.MyEntry.MyDocument != null)
|
||||
{
|
||||
PdfInfo pi = PdfInfo.Get(this, false);
|
||||
if(pi != null) _MSWordPageCount = (float)pi.PageCount;// B2018-071 Don't crash on invalid MS Word section
|
||||
if (pi != null) _MSWordPageCount = (float)pi.PageCount;// B2018-071 Don't crash on invalid MS Word section
|
||||
}
|
||||
return _MSWordPageCount;
|
||||
}
|
||||
@@ -2071,7 +2071,7 @@ namespace VEPROMS.CSLA.Library
|
||||
{
|
||||
bool rval = false;
|
||||
ItemInfo itm = this;
|
||||
while (itm != null &&!itm.IsHigh && !rval)
|
||||
while (itm != null && !itm.IsHigh && !rval)
|
||||
{
|
||||
rval = itm.IsCautionOrNotePart;
|
||||
if (!rval) itm = itm.MyParent;
|
||||
@@ -2111,6 +2111,16 @@ namespace VEPROMS.CSLA.Library
|
||||
return (sd.Type == type);
|
||||
}
|
||||
|
||||
// C2025-024 - Electronic Procedures - Export
|
||||
//return if should export blanks
|
||||
public bool EPexportblank(int AnnTypeID)
|
||||
{
|
||||
if (ActiveFormat.PlantFormat.EPFormatFiles.Count == 0 || !ActiveFormat.PlantFormat.EPFormatFiles.Exists(x => x.AnnotationTypeID == AnnTypeID))
|
||||
return true;
|
||||
else
|
||||
return ActiveFormat.PlantFormat.EPFormatFiles.Find(x => x.AnnotationTypeID == AnnTypeID).exportblank;
|
||||
}
|
||||
|
||||
// C2025-023 - Electronic Procedures - Modifications to PROMS
|
||||
//return EPFields that match this step type or a parent step type
|
||||
public EPFields GetValidEPFields(int AnnTypeID)
|
||||
|
@@ -61,6 +61,25 @@ namespace VEPROMS.CSLA.Library
|
||||
return LazyLoad(ref _AnnotationTypeID, "@AnnotationTypeID");
|
||||
}
|
||||
}
|
||||
|
||||
// Return Name of Annotation that EP Format File is Attached to
|
||||
public string AnnotationName()
|
||||
{
|
||||
return AnnotationTypeInfo.Get((int) AnnotationTypeID).Name;
|
||||
}
|
||||
|
||||
//if xml value is blank, should element export?
|
||||
//defaults to true
|
||||
private LazyLoad<bool> _exportblank;
|
||||
[DisplayName("exportblank")]
|
||||
[Description("if xml value is blank, should element export?")]
|
||||
public bool exportblank
|
||||
{
|
||||
get
|
||||
{
|
||||
return LazyLoad(ref _exportblank, "@exportblank");
|
||||
}
|
||||
}
|
||||
// returns a list of fields that are defined in the EP format's structure
|
||||
private EPFields _FieldList;
|
||||
public EPFields FieldList
|
||||
@@ -68,7 +87,7 @@ namespace VEPROMS.CSLA.Library
|
||||
get
|
||||
{
|
||||
XmlDocument xd = GetEPFormatData(Name);
|
||||
return _FieldList == null ? _FieldList = new EPFields(xd.SelectNodes("/EPFormat/EPField")) : _FieldList;
|
||||
return _FieldList ?? (_FieldList = new EPFields(xd.SelectNodes("/EPFormat/EPField")));
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
@@ -296,7 +315,7 @@ namespace VEPROMS.CSLA.Library
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw new ArgumentException($"Error in returncols for EP file: {((EPFormatFile)MyParentFormat).Name}.xml, field: {name}");
|
||||
throw new ArgumentException($"Error in returncols for EP file, field: {name}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -325,7 +344,7 @@ namespace VEPROMS.CSLA.Library
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw new ArgumentException($"Error in validforsteptypes for EP file: {((EPFormatFile) MyParentFormat).Name}.xml, field: {name}");
|
||||
throw new ArgumentException($"Error in validforsteptypes for EP file, field: {name}");
|
||||
}
|
||||
}
|
||||
public bool IsValidForStepType(string StepType)
|
||||
@@ -344,6 +363,9 @@ namespace VEPROMS.CSLA.Library
|
||||
try
|
||||
{
|
||||
DocVersionInfo MyDocVersion = currAnn.MyItem.MyDocVersion;
|
||||
|
||||
if (MyDocVersion.DocVersionAssociations != null && MyDocVersion.DocVersionAssociations.Any())
|
||||
{
|
||||
ROFSTLookup lookup = MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MyDocVersion);
|
||||
|
||||
string roid = FormatRoidKey(rosource, false);
|
||||
@@ -355,12 +377,20 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
return mylist;
|
||||
}
|
||||
catch (Exception Ex)
|
||||
else
|
||||
{
|
||||
throw new ArgumentException($"Error in rosource for EP file: {((EPFormatFile)MyParentFormat).Name}.xml, field: {name}");
|
||||
}
|
||||
return new List<ROListItem>
|
||||
{
|
||||
new ROListItem("", "")
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw new ArgumentException($"Error in rosource for EP file, field: {name}");
|
||||
}
|
||||
}
|
||||
|
||||
//return a list of values for the specified ROID
|
||||
//given the EP items return columns
|
||||
@@ -394,6 +424,7 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
//C2025-023 - Electronic Procedures - Modifications to PROMS
|
||||
// class to handle return of RO Lists
|
||||
|
@@ -618,6 +618,15 @@ namespace Volian.Controls.Library
|
||||
}
|
||||
private int _MyLastFormatID = -1;
|
||||
private StepRTB _MyStepRTB;
|
||||
private static int _OringFlg;
|
||||
public static int OringFlg
|
||||
{
|
||||
get { return _OringFlg; }
|
||||
set
|
||||
{
|
||||
_OringFlg = value;
|
||||
}
|
||||
}
|
||||
public StepRTB MyStepRTB
|
||||
{
|
||||
get { return _MyStepRTB; }
|
||||
@@ -4096,6 +4105,7 @@ namespace Volian.Controls.Library
|
||||
|
||||
public void DoCopyStep()
|
||||
{
|
||||
MyEditItem.SaveCurrentAndContents(); // B2025-038 copy step and text to another procedure in another screen.
|
||||
// highlight selected step(s) and prompt to see if selection is what user wants:
|
||||
if (MyFlexGrid != null) MyEditItem.IdentifyMe(true);
|
||||
MyEditItem.IdentifyChildren(true);
|
||||
@@ -4143,16 +4153,22 @@ namespace Volian.Controls.Library
|
||||
|
||||
private void btnPdfCreate_Click(object sender, EventArgs e)
|
||||
{
|
||||
// B2025-036 split screen print issue. if oringFlg == 1 the ctrl-p keys was pressed.
|
||||
_OringFlg = 0;
|
||||
DevComponents.DotNetBar.eEventSource oring = ((DevComponents.DotNetBar.Events.EventSourceArgs)e).Source;
|
||||
if (oring == eEventSource.Keyboard)
|
||||
_OringFlg = 1;
|
||||
|
||||
if (MyItemInfo == null) return; // if creating a pdf before rtb exists, return;
|
||||
if (MyEditItem != null) MyEditItem.SaveCurrentAndContents();
|
||||
OnPrintRequest(new StepTabRibbonEventArgs(MyItemInfo.MyProcedure), 0);
|
||||
OnPrintRequest(new StepTabRibbonEventArgs(MyItemInfo.MyProcedure, _OringFlg), 0);
|
||||
}
|
||||
|
||||
private void btnPdfQuickCreate_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (MyItemInfo == null) return; // if creating a pdf before rtb exists, return;
|
||||
if (MyEditItem != null) MyEditItem.SaveCurrentAndContents();
|
||||
OnPrintRequest(new StepTabRibbonEventArgs(MyItemInfo.MyProcedure), 1);
|
||||
OnPrintRequest(new StepTabRibbonEventArgs(MyItemInfo.MyProcedure, _OringFlg), 1);
|
||||
}
|
||||
|
||||
private void btnCASCreate_Click(object sender, EventArgs e)
|
||||
@@ -4814,9 +4830,10 @@ namespace Volian.Controls.Library
|
||||
public class StepTabRibbonEventArgs : EventArgs
|
||||
{
|
||||
public StepTabRibbonEventArgs() { ; }
|
||||
public StepTabRibbonEventArgs(ItemInfo proc)
|
||||
public StepTabRibbonEventArgs(ItemInfo proc, int oringFlg = 0)
|
||||
{
|
||||
_Proc = proc;
|
||||
OringFlg = oringFlg;
|
||||
}
|
||||
private ItemInfo _Proc;
|
||||
|
||||
@@ -4825,6 +4842,13 @@ namespace Volian.Controls.Library
|
||||
get { return _Proc; }
|
||||
set { _Proc = value; }
|
||||
}
|
||||
// B2025-036 split screen print issue. if oringFlg == 1 the ctrl-p keys was pressed.
|
||||
private int _OringFlg;
|
||||
public int OringFlg
|
||||
{
|
||||
get { return _OringFlg; }
|
||||
set { _OringFlg = value; }
|
||||
}
|
||||
}
|
||||
public delegate void StepTabRibbonEvent(object sender, StepTabRibbonEventArgs args);
|
||||
|
||||
|
@@ -120,7 +120,7 @@ namespace Volian.Controls.Library
|
||||
foreach (string t in tmps) cmb.Items.Add(t.Trim());
|
||||
string val = MyConfig.GetValue("EP", EP.name);
|
||||
if (val != null && val != "") cmb.SelectedItem = val;
|
||||
cmb.DropDownWidth = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Length).First(), cmb.Font).Width + SystemInformation.VerticalScrollBarWidth;
|
||||
cmb.DropDownWidth = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Length).FirstOrDefault(), cmb.Font).Width + SystemInformation.VerticalScrollBarWidth;
|
||||
cmb.Width = cmb.DropDownWidth;
|
||||
_DicComboBox.Add(EP.name, cmb);
|
||||
panelEP.Controls.Add(cmb, 1, panelEP.RowCount - 1);
|
||||
@@ -135,7 +135,7 @@ namespace Volian.Controls.Library
|
||||
cmb.ValueMember = "Value";
|
||||
cmb.DataSource = tmps;
|
||||
cmb.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
cmb.DropDownWidth = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Text.Length).First().Text, cmb.Font).Width + SystemInformation.VerticalScrollBarWidth;
|
||||
cmb.DropDownWidth = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Text.Length).FirstOrDefault()?.Text, cmb.Font).Width + SystemInformation.VerticalScrollBarWidth;
|
||||
cmb.Width = cmb.DropDownWidth;
|
||||
|
||||
_DicSingleRO.Add(EP.name, cmb);
|
||||
@@ -148,7 +148,7 @@ namespace Volian.Controls.Library
|
||||
List<ROListItem> tmps = EP.getROList(currAnn, false);
|
||||
lb.DisplayMember = "Text";
|
||||
lb.ValueMember = "Value";
|
||||
lb.Width = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Text.Length).First().Text, lb.Font).Width + SystemInformation.VerticalScrollBarWidth;
|
||||
lb.Width = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Text.Length).FirstOrDefault()?.Text, lb.Font).Width + SystemInformation.VerticalScrollBarWidth;
|
||||
|
||||
lb.DataSource = tmps;
|
||||
_DicMultiRO.Add(EP.name, lb);
|
||||
|
@@ -152,6 +152,15 @@ namespace Volian.Controls.Library
|
||||
get { return _Index; }
|
||||
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
|
||||
private string _Unit;
|
||||
public string Unit
|
||||
@@ -179,6 +188,13 @@ namespace Volian.Controls.Library
|
||||
_Destination = destination;
|
||||
_Index = index;
|
||||
}
|
||||
public vlnTreeEventArgs(TreeNode node, TreeNode destination, int index, int annTypeId)
|
||||
{
|
||||
_Node = node;
|
||||
_Destination = destination;
|
||||
_Index = index;
|
||||
_AnnotationTypeId = annTypeId;
|
||||
}
|
||||
//jcb multiunit
|
||||
public vlnTreeEventArgs(TreeNode node, TreeNode destination, int index, string unit, int unitIndex)
|
||||
{
|
||||
@@ -188,6 +204,15 @@ namespace Volian.Controls.Library
|
||||
_Unit = unit;
|
||||
_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
|
||||
#endregion
|
||||
public override string ToString()
|
||||
@@ -706,7 +731,10 @@ namespace Volian.Controls.Library
|
||||
if (ui.IsAdministrator() || ui.IsSetAdministrator(fi))// && fi.MyParent == null) //VEPROMS level
|
||||
{
|
||||
if (fi.HasWorkingDraft)
|
||||
{
|
||||
cm.MenuItems.Add("Export Procedure Set", new EventHandler(mi_Click));
|
||||
//AddEPExport(cm.MenuItems, 0, null);
|
||||
}
|
||||
else
|
||||
cm.MenuItems.Add("Import Procedure Set", new EventHandler(mi_Click));
|
||||
if (DoSpecificInfo)
|
||||
@@ -842,6 +870,9 @@ namespace Volian.Controls.Library
|
||||
if (ui.IsAdministrator() || ui.IsSetAdministrator(pri.MyDocVersion))
|
||||
{
|
||||
cm.MenuItems.Add("Export Procedure", mi_Click);
|
||||
//C2025-024 Proms XML Output - if have any EP Format files, add dropdown menu for exporting EP formats
|
||||
if (pri.ActiveFormat.PlantFormat.EPFormatFiles.Count > 0)
|
||||
AddEPExport(cm.MenuItems, pri.MyDocVersion.MultiUnitCount, pri.MyDocVersion.UnitNames, pri.ActiveFormat.PlantFormat.EPFormatFiles);
|
||||
}
|
||||
if (ui.IsAdministrator() || ui.IsSetAdministrator(pri.MyDocVersion) || ui.IsWriter(pri.MyDocVersion))
|
||||
{
|
||||
@@ -1355,6 +1386,43 @@ 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, EPFormatFiles EPFiles)
|
||||
{
|
||||
//add outer menu
|
||||
MenuItem mi = menuItems.Add("Electronic Procedure Viewer Export");
|
||||
foreach (EPFormatFile epAnnType in EPFiles)
|
||||
{
|
||||
|
||||
//Add item for each individual EP Viewer
|
||||
MenuItem mv = mi.MenuItems.Add(epAnnType.AnnotationName());
|
||||
|
||||
//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 = $"{epAnnType.AnnotationTypeID},{k}";
|
||||
multiunit_mv.Click += new EventHandler(miEP_Click);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mv.Tag = $"{epAnnType.AnnotationTypeID},0";
|
||||
mv.Click += new EventHandler(miEP_Click);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void AddApprovedRevisionsMultiUnit(Menu.MenuItemCollection menuItemCollection, ProcedureInfo pri)
|
||||
{
|
||||
_currentPri = pri;
|
||||
@@ -1538,6 +1606,27 @@ namespace Volian.Controls.Library
|
||||
FlexibleMessageBox.Show("Approved procedure saved to import file " + fileName, "Creating Export of Approved Procedure", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
|
||||
//C2025-015 Get a partial folder path. This will be used in building the PDF file name when viewing Approved procedures
|
||||
string ProcFolderPathforApprovedPDF(string fullPath)
|
||||
{
|
||||
string rtnStr = "";
|
||||
try
|
||||
{
|
||||
// the fullPath string that is passed in ends with the Working Draft node. We want to trim that off
|
||||
string[] strParts = fullPath.Substring(0, fullPath.LastIndexOf("\\")).Split('\\'); //fullPath.Replace("\\Working Draft","").Split('\\');
|
||||
int lastPart = Math.Max(strParts.Length - 1, 0);
|
||||
rtnStr = strParts[lastPart];
|
||||
if (rtnStr.ToUpper().StartsWith("UNIT"))
|
||||
{
|
||||
rtnStr = strParts[lastPart - 1] + "_" + rtnStr;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
rtnStr = fullPath.Replace("\\", "_"); // just return the full path with _ intead of backslashes
|
||||
}
|
||||
return rtnStr;
|
||||
}
|
||||
|
||||
void ApprovedRevision_Click(object sender, EventArgs e)
|
||||
{
|
||||
@@ -1551,7 +1640,10 @@ namespace Volian.Controls.Library
|
||||
if ((ri.RevisionID < int.Parse(mip.Parent.Tag.ToString())) && ri.LatestVersion.MyStage.IsApproved != 0)
|
||||
superceded = true;
|
||||
}
|
||||
vlnTreeViewPdfArgs args = new vlnTreeViewPdfArgs(Volian.Base.Library.TmpFile.CreateFileName(ProcedureInfo.Get(ri.ItemID).PDFNumber), ri.LatestVersion.PDF, superceded ? "Superceded" : "");
|
||||
ProcedureInfo prcInfo = ProcedureInfo.Get(ri.ItemID);
|
||||
// C2025-015 build a file name that includes a partial folder path and approved revision number
|
||||
string approvedPDFName = string.Format("{0}_{1} Revision {2}", ProcFolderPathforApprovedPDF(prcInfo.SearchDVPath_clean), prcInfo.PDFNumber,ri.RevisionNumber);
|
||||
vlnTreeViewPdfArgs args = new vlnTreeViewPdfArgs(Volian.Base.Library.TmpFile.CreateFileName(approvedPDFName), ri.LatestVersion.PDF, superceded ? "Superceded" : "");
|
||||
OnViewPDF(sender, args);
|
||||
// System.Diagnostics.Process pp = System.Diagnostics.Process.Start(GetDocPdf(ri, superceded));
|
||||
}
|
||||
@@ -1560,6 +1652,7 @@ namespace Volian.Controls.Library
|
||||
bool superceded = false;
|
||||
MenuItem mi = sender as MenuItem;
|
||||
if (mi == null) return;
|
||||
string childName = "";
|
||||
//RevisionInfo ri = mi.Tag as RevisionInfo;
|
||||
RevisionInfo ri = RevisionInfo.Get(int.Parse(mi.Tag.ToString()));
|
||||
{
|
||||
@@ -1567,12 +1660,22 @@ namespace Volian.Controls.Library
|
||||
//B2021-086 Added the check for the last revision stage is an Approved stage
|
||||
if ((ri.RevisionID < int.Parse(mip.Parent.Tag.ToString())) && ri.LatestVersion.MyStage.IsApproved != 0)
|
||||
superceded = true;
|
||||
// C2025_015 get the child's name to append to file name
|
||||
mip = mip.Parent as MenuItem;
|
||||
if (mip != null)
|
||||
{
|
||||
childName = "_" + mip.Text;
|
||||
}
|
||||
}
|
||||
ItemInfo ii = ItemInfo.Get(ri.ItemID);
|
||||
ii.MyDocVersion.DocVersionConfig.SelectedSlave = ri.MyConfig.Applicability_Index;
|
||||
vlnTreeViewPdfArgs args = new vlnTreeViewPdfArgs(Volian.Base.Library.TmpFile.CreateFileName(ProcedureInfo.Get(ri.ItemID).PDFNumber), ri.LatestVersion.PDF, superceded ? "Superceded" : "");
|
||||
ProcedureInfo prcInfo = ProcedureInfo.Get(ri.ItemID);
|
||||
if (prcInfo.MyContent.Number.ToUpper().Contains("<U") || ii.MyDocVersion.DocVersionConfig.Unit_ProcedureNumber.Contains("#"))
|
||||
childName = ""; // unit identification already part of procedure number-no need to add the child name to the PDF file name
|
||||
// C2025-015 build a file name that includes a partial folder path, the child name and approved revision number
|
||||
string approvedPDFName = string.Format("{0}{1}_{2} Revision {3}", ProcFolderPathforApprovedPDF(prcInfo.SearchDVPath_clean),childName, prcInfo.PDFNumber, ri.RevisionNumber);
|
||||
vlnTreeViewPdfArgs args = new vlnTreeViewPdfArgs(Volian.Base.Library.TmpFile.CreateFileName(approvedPDFName), ri.LatestVersion.PDF, superceded ? "Superceded" : "");
|
||||
OnViewPDF(sender, args);
|
||||
// System.Diagnostics.Process pp = System.Diagnostics.Process.Start(GetDocPdf(ri, superceded));
|
||||
}
|
||||
void SummaryOfChanges_Click(object sender, EventArgs e)
|
||||
{
|
||||
@@ -2251,6 +2354,23 @@ namespace Volian.Controls.Library
|
||||
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 void CollapseProcedures()
|
||||
{
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
private static string BuildStepTab(ItemInfo item)
|
||||
public static string BuildStepTab(ItemInfo item)
|
||||
{
|
||||
if (item == null)
|
||||
return string.Empty;
|
||||
|
Reference in New Issue
Block a user