409 lines
11 KiB
C#
409 lines
11 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.ComponentModel;
|
|
using System.Xml;
|
|
using System.Linq;
|
|
using System.Data.SqlClient;
|
|
using System.Data;
|
|
using Csla.Data;
|
|
using static VEPROMS.CSLA.Library.ROFSTLookup;
|
|
|
|
namespace VEPROMS.CSLA.Library
|
|
{
|
|
//C2025-023 - Electronic Procedures - Modifications to PROMS
|
|
// class to handle storage and access of EPFormatFile and EPFormatFile details
|
|
#region EPFormatFiles
|
|
[TypeConverter(typeof(vlnListConverter<EPFormatFiles, EPFormatFile>))]
|
|
public class EPFormatFiles : vlnFormatList<EPFormatFile>
|
|
{
|
|
public EPFormatFiles(XmlNodeList xmlNodeList) : base(xmlNodeList) { }
|
|
}
|
|
#endregion
|
|
#region EPFormatFile
|
|
public class EPFormatFile : vlnFormatItem
|
|
{
|
|
#region Constructor
|
|
public EPFormatFile(XmlNode xmlNode) : base(xmlNode) { }
|
|
public EPFormatFile() : base() { }
|
|
#endregion
|
|
#region Business Fields
|
|
// Name of the EP Viewer Format File
|
|
private LazyLoad<string> _Name;
|
|
[DisplayName("Name")]
|
|
[Description("EP Viewer File Name")]
|
|
public string Name
|
|
{
|
|
get
|
|
{
|
|
return LazyLoad(ref _Name, "@Name");
|
|
}
|
|
}
|
|
// Name of the EP Viewer Format File
|
|
private LazyLoad<string> _Description;
|
|
[DisplayName("Description")]
|
|
[Description("EP Viewer Description")]
|
|
public string Description
|
|
{
|
|
get
|
|
{
|
|
return LazyLoad(ref _Description, "@Description");
|
|
}
|
|
}
|
|
// Id of Annotation Type Associated with this file
|
|
private LazyLoad<int?> _AnnotationTypeID;
|
|
[DisplayName("AnnotationTypeID")]
|
|
[Description("Id of Annotation Type Associated with this file")]
|
|
public int? AnnotationTypeID
|
|
{
|
|
get
|
|
{
|
|
return LazyLoad(ref _AnnotationTypeID, "@AnnotationTypeID");
|
|
}
|
|
}
|
|
// returns a list of fields that are defined in the EP format's structure
|
|
private EPFields _FieldList;
|
|
public EPFields FieldList
|
|
{
|
|
get
|
|
{
|
|
XmlDocument xd = GetEPFormatData(Name);
|
|
return _FieldList == null ? _FieldList = new EPFields(xd.SelectNodes("/EPFormat/EPField")) : _FieldList;
|
|
}
|
|
}
|
|
#endregion
|
|
#region Business Methods
|
|
// update all in-use annotation types that have Electronic Procedures
|
|
public static void UpdateAllInUseEPAnnotationTypes()
|
|
{
|
|
foreach (int formatid in GetAllInUseFormats())
|
|
{
|
|
PlantFormat frmt = FormatInfo.Get(formatid).PlantFormat;
|
|
foreach (EPFormatFile EP in frmt.EPFormatFiles)
|
|
{
|
|
UpdateAnnotationTypeAsEP((int) EP.AnnotationTypeID);
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
#region Data Access
|
|
// static - Load EP Format details - save to db (insert/update)
|
|
public static void UpdateEPFormat(string name, string data, string userID)
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.CommandText = "vesp_UpdateEPFormat";
|
|
cm.Parameters.AddWithValue("@name", name);
|
|
cm.Parameters.AddWithValue("@data", data);
|
|
cm.Parameters.AddWithValue("@userID", userID);
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
cm.ExecuteNonQuery();
|
|
}
|
|
}
|
|
}
|
|
|
|
// load data for getting fieldlist for this EPFormat
|
|
public static XmlDocument GetEPFormatData(string name)
|
|
{
|
|
name = name.Replace(".xml", "");
|
|
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.Text;
|
|
cm.CommandText = "Select Data FROM EPFormats where Name = @Name";
|
|
cm.Parameters.AddWithValue("@Name", name);
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
{
|
|
if (dr.Read())
|
|
{
|
|
XmlDocument xd = new XmlDocument();
|
|
xd.XmlResolver = null;
|
|
xd.LoadXml(dr.GetString("Data"));
|
|
return xd;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
// Get all in-use formats
|
|
public static List<int> GetAllInUseFormats()
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.Text;
|
|
cm.CommandText = @"SELECT Distinct Formats.[FormatID]
|
|
FROM
|
|
(
|
|
SELECT FormatID FROM Contents
|
|
UNION
|
|
SELECT FormatID FROM DocVersions
|
|
UNION
|
|
SELECT FormatID FROM Folders
|
|
) inuse
|
|
inner join Formats
|
|
on inuse.FormatID = Formats.FormatID";
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
|
|
using (DataTable dt = new DataTable())
|
|
{
|
|
using (SqlDataAdapter da = new SqlDataAdapter(cm))
|
|
{
|
|
da.Fill(dt);
|
|
return dt.AsEnumerable().Select(x => x.Field<int>("FormatID")).ToList();
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
// update an annotation type as an Electronic Procedure Annotation Type
|
|
public static void UpdateAnnotationTypeAsEP(int typeID)
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.Text;
|
|
cm.CommandText = @"Update AnnotationTypes
|
|
SET IsEPAnnotationType = 1
|
|
WHERE TypeID = @typeID";
|
|
cm.Parameters.AddWithValue("@typeID", typeID);
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
cm.ExecuteNonQuery();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Returns true if there are any EP Annotation Types
|
|
public static bool IsEPAnnotationType()
|
|
{
|
|
try
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.Text;
|
|
cm.CommandText = @"SELECT RESULT = CASE WHEN
|
|
EXISTS(SELECT 1 FROM AnnotationTypes where IsEPAnnotationType = 1)
|
|
THEN 1 ELSE 0 END";
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
{
|
|
if (dr.Read() && dr.GetInt32("RESULT") == 1)
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
// EP Support has not yet been added for this DB
|
|
// IsEPAnnotationType does not exist
|
|
// need to run PROMS Fixes
|
|
// until then will ignore EP code
|
|
// instead of crashing for a field not found
|
|
}
|
|
|
|
return false;
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
public class EPFields : vlnFormatList<EPField>
|
|
{
|
|
public EPFields()
|
|
{
|
|
}
|
|
|
|
public EPFields(XmlNodeList xmlNodeList) : base(xmlNodeList) { }
|
|
}
|
|
// EP field class
|
|
public class EPField : vlnFormatItem
|
|
{
|
|
public EPField(XmlNode xmlNode) : base(xmlNode) { }
|
|
public EPField() : base() { }
|
|
private LazyLoad<string> _name;
|
|
public string name
|
|
{
|
|
get
|
|
{
|
|
return LazyLoad(ref _name, "@name");
|
|
}
|
|
}
|
|
private LazyLoad<string> _type;
|
|
public string type
|
|
{
|
|
get
|
|
{
|
|
return LazyLoad(ref _type, "@type");
|
|
}
|
|
}
|
|
private LazyLoad<string> _label;
|
|
public string label
|
|
{
|
|
get
|
|
{
|
|
string tmp = LazyLoad(ref _label, "@label");
|
|
|
|
if (string.IsNullOrEmpty(tmp))
|
|
return LazyLoad(ref _name, "@name");
|
|
else
|
|
return tmp;
|
|
}
|
|
}
|
|
private LazyLoad<string> _text;
|
|
public string text
|
|
{
|
|
get
|
|
{
|
|
return LazyLoad(ref _text, "@text");
|
|
}
|
|
}
|
|
//roid of group item that individual sub-items will be the choices for the list/combobox for ROSINGLE and ROMULTI
|
|
private LazyLoad<string> _rosource;
|
|
public string rosource
|
|
{
|
|
get
|
|
{
|
|
return LazyLoad(ref _rosource, "@rosource");
|
|
}
|
|
}
|
|
//the columns in the RO that will be included in the exports
|
|
private LazyLoad<string> _returncols;
|
|
public List<string> returncols()
|
|
{
|
|
try
|
|
{
|
|
string tmp = LazyLoad(ref _returncols, "@returncols");
|
|
return tmp.Split(',').Select(p => p.Trim()).ToList();
|
|
}
|
|
catch
|
|
{
|
|
throw new ArgumentException($"Error in returncols for EP file: {((EPFormatFile)MyParentFormat).Name}.xml, field: {name}");
|
|
}
|
|
}
|
|
|
|
//number of lines for a multi-line text box to span
|
|
private LazyLoad<int?> _numlines;
|
|
public int numlines
|
|
{
|
|
get
|
|
{
|
|
int? tmp = LazyLoad(ref _numlines, "@numlines");
|
|
|
|
if (tmp == null)
|
|
return 1;
|
|
|
|
return (int) tmp;
|
|
}
|
|
}
|
|
//step types that the EPForma Item is valid for (as a list of types)
|
|
private LazyLoad<string> _validforsteptypes;
|
|
public List<string> validforsteptypes()
|
|
{
|
|
try
|
|
{
|
|
string tmp = LazyLoad(ref _validforsteptypes, "@validforsteptypes");
|
|
return tmp.Split(',').Select(p => p.Trim()).ToList();
|
|
}
|
|
catch
|
|
{
|
|
throw new ArgumentException($"Error in validforsteptypes for EP file: {((EPFormatFile) MyParentFormat).Name}.xml, field: {name}");
|
|
}
|
|
}
|
|
public bool IsValidForStepType(string StepType)
|
|
{
|
|
List<string> tmp = validforsteptypes();
|
|
return tmp.Contains(StepType);
|
|
}
|
|
|
|
//return a list of items based on the ROsource specified in the EPFormat File
|
|
//will return all RO items under the Group that's roid = the rosource
|
|
public List<ROListItem> getROList(AnnotationInfo currAnn, bool includeblank)
|
|
{
|
|
if (string.IsNullOrEmpty(rosource))
|
|
return new List<ROListItem>();
|
|
|
|
try
|
|
{
|
|
DocVersionInfo MyDocVersion = currAnn.MyItem.MyDocVersion;
|
|
ROFSTLookup lookup = MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MyDocVersion);
|
|
|
|
string roid = FormatRoidKey(rosource, false);
|
|
rochild[] children = lookup.GetRoChildrenByRoid(roid);
|
|
|
|
List<ROListItem> mylist = children.Select(x => new ROListItem(x.title, x.roid.Substring(0, 12))).ToList();
|
|
if (includeblank)
|
|
mylist.Insert(0, new ROListItem("", ""));
|
|
|
|
return mylist;
|
|
}
|
|
catch (Exception Ex)
|
|
{
|
|
throw new ArgumentException($"Error in rosource for EP file: {((EPFormatFile)MyParentFormat).Name}.xml, field: {name}");
|
|
}
|
|
}
|
|
|
|
|
|
//return a list of values for the specified ROID
|
|
//given the EP items return columns
|
|
//will return all RO items under the Group that's roid = the rosource
|
|
public List<string> getROValuesList(AnnotationInfo currAnn, string roid)
|
|
{
|
|
if (string.IsNullOrEmpty(roid))
|
|
return new List<string>();
|
|
|
|
List<string> values = new List<string>();
|
|
DocVersionInfo MyDocVersion = currAnn.MyItem.MyDocVersion;
|
|
ROFSTLookup lookup = MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(MyDocVersion);
|
|
rochild ro = lookup.GetRoChild(roid);
|
|
|
|
List<string> rtncols = returncols();
|
|
|
|
if (rtncols.Count == 0)
|
|
{
|
|
values.Add(ro.value);
|
|
}
|
|
else
|
|
{
|
|
foreach (string rcol in rtncols)
|
|
{
|
|
rochild ro_indiv = Array.Find(ro.children, x => x.appid.EndsWith($".{rcol}"));
|
|
if (ro_indiv.value != null) values.Add(ro_indiv.value);
|
|
}
|
|
}
|
|
|
|
return values;
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
//C2025-023 - Electronic Procedures - Modifications to PROMS
|
|
// class to handle return of RO Lists
|
|
#region EPFormatFiles
|
|
public class ROListItem
|
|
{
|
|
public string Text { get; private set; }
|
|
public string Value { get; private set; }
|
|
public ROListItem(string _text, string _value)
|
|
{
|
|
Text = _text; Value = _value;
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
|