815 lines
30 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WestinghouseROImport
{
public partial class frmROImport : Form
{
public string MyStatus
{
get { return tsslStatus.Text; }
set { tsslStatus.Text = value; Application.DoEvents(); }
}
public frmROImport()
{
InitializeComponent();
}
private string _STPDBRecID = "";
public string STPDBRecID
{
get { return _STPDBRecID; }
set { _STPDBRecID = value; }
}
private void clearOldSetpointData_Click(object sender, EventArgs e)
{
int count = ClearSetpointData();
MessageBox.Show(string.Format("{0} setpoint records deleted", count), "Purge", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private int ClearSetpointData()
{
STPTableAdapter.Fill(this.rOMasterDataSet.RO000002);
DataTable dto = STPTableAdapter.GetData();
List<DataRow> deleteList = new List<DataRow>();
foreach (DataRow dr in dto.Rows)
{
if (int.Parse(dr["RecType"].ToString()) == 3) // Remove Grouping
{
if (dr["ParentID"].ToString() != "00000000")
{
deleteList.Add(dr);
}
else
{
STPDBRecID = dr["RecID"].ToString();
}
}
if (int.Parse(dr["RecType"].ToString()) == 5) // Remove ROs
{
deleteList.Add(dr);
}
}
int count = deleteList.Count;
while (deleteList.Count > 0)
{
DataRow dr = deleteList[0];
dr.Delete();
STPTableAdapter.Update(dr);
deleteList.RemoveAt(0);
}
return count;
}
private Dictionary<string,string> _SetpointParameters;
public Dictionary<string,string> SetpointParameters
{
get { return _SetpointParameters; }
set { _SetpointParameters = value; }
}
private DataRow _DrCount;
public DataRow DrCount
{
get { return _DrCount; }
set { _DrCount = value; }
}
private void importSetpointData_Click(object sender, EventArgs e)
{
DateTime dtStart = DateTime.Now;
ClearSetpointData();
STPTableAdapter.Fill(this.rOMasterDataSet.RO000002);
STPImportTableAdapter.Fill(this.rOImportDataSet.ImportSTP_qry);
DataTable dto = STPTableAdapter.GetData();
DrCount = dto.Rows[0];
DataTable dti = STPImportTableAdapter.GetData();
SetpointParameters = new Dictionary<string, string>();
foreach (DataRow dr in dti.Rows)
{
// Parameter Name Value Description
//Console.WriteLine("Parameter = '{0}', Name = '{1}', Value = '{2}', Description = '{3}'",
// dr["Parameter"], dr["Name"], dr["Value"], dr["Description"]);
MyStatus = dr["Name"].ToString();
AddSetpoint(dr["Parameter"].ToString(), dr["Name"].ToString(), dr["Value"].ToString(), dr["Description"].ToString());
}
STPTableAdapter.Update(DrCount);
DateTime dtEnd = DateTime.Now;
MyStatus = string.Format("{0} Setpoint ROs added in {1} seconds", dti.Rows.Count,TimeSpan.FromTicks(dtEnd.Ticks - dtStart.Ticks).TotalSeconds);
MessageBox.Show(string.Format("{0} ROs added", dti.Rows.Count), "ROs Loaded", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void AddSetpoint(string parameter, string id, string value, string description)
{
string parentid = AddSetpointParameter(parameter);
string recid = GetNextSTPRecID();
string rovalue = BuildSTPROValue(id, value, description);
STPTableAdapter.Insert(recid, 5, parentid, id, DateTimeStamp, rovalue);
}
public string DateTimeStamp
{
get {return DateTime.Now.ToString("yyyyMMddHHmm");}
}
private string GetNextSTPRecID()
{
string nextRec = DrCount["Info"].ToString();
nextRec = string.Format("{0:x08}", Convert.ToInt32(nextRec,16) + 1);
DrCount["Info"] = nextRec;
//STPTableAdapter.Update(DrCount);
//Console.WriteLine("ID = {0}", nextRec);
return nextRec;
}
private string BuildSTPROValue(string id, string value, string description)
{
value = FixSpecialCharacters(value);
description = FixSpecialCharacters(description);
return string.Format("<Setpoint MenuTitle=\"{1} - {2}\"><Setpoint__Valuea>{1}</Setpoint__Valuea><Setpoint__ID>{0}</Setpoint__ID><Description>{2}</Description></Setpoint>"
,id,value,description);
}
private string FixSpecialCharacters(string str)
{
string str2 = str.Trim();
StringBuilder sb = new StringBuilder();
foreach (char c in str2)
{
switch (c)
{
case '"':
sb.Append("&quot;");
break;
case '&':
sb.Append("&amp;");
break;
case '<':
sb.Append("&lt;");
break;
case '>':
sb.Append("&gt;");
break;
case '\xA0':
sb.Append(' ');
break;
case '\x1E':
sb.Append('-');
break;
case '\xB0':
sb.Append(c);
break;
case '\u2013':
sb.Append('-');
break;
default:
if (c < ' ' || c > '\x7F')
{
sb.Append(string.Format("[x{0:X}]", (int)c));
}
else
sb.Append(c);
break;
}
}
return sb.ToString();
}
private string AddSetpointParameter(string parameter)
{
if (!SetpointParameters.ContainsKey(parameter))
{
string recid = GetNextSTPRecID();
string paramValue = BuildSTPParam(parameter);
STPTableAdapter.Insert(recid, 3, STPDBRecID, null, DateTimeStamp, paramValue);
SetpointParameters.Add(parameter, recid);
}
return SetpointParameters[parameter];
}
private string BuildSTPParam(string parameter)
{
return string.Format("<vlnGroup MenuTitle=\"{0}\"><Parameter>{0}</Parameter></vlnGroup>", parameter);
}
private void clearOldMELData_Click(object sender, EventArgs e)
{
// Clear Old MEL Data
int count = ClearMELData();
MessageBox.Show(string.Format("{0} MEL records deleted", count), "Purge", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private string MELDBRecID;
private int ClearMELData()
{
MELTableAdapter.Fill(this.rOMasterDataSet.RO000003);
DataTable dto = MELTableAdapter.GetData();
List<DataRow> deleteList = new List<DataRow>();
foreach (DataRow dr in dto.Rows)
{
if (int.Parse(dr["RecType"].ToString()) == 3) // Remove Grouping
{
if (dr["ParentID"].ToString() != "00000000")
{
deleteList.Add(dr);
}
else
{
MELDBRecID = dr["RecID"].ToString();
}
}
if (int.Parse(dr["RecType"].ToString()) == 5) // Remove ROs
{
deleteList.Add(dr);
}
}
int count = deleteList.Count;
while (deleteList.Count > 0)
{
DataRow dr = deleteList[0];
dr.Delete();
MELTableAdapter.Update(dr);
deleteList.RemoveAt(0);
}
return count;
}
Dictionary<string, string> _MELSystems;
public Dictionary<string, string> MELSystems
{
get { return _MELSystems; }
set { _MELSystems = value; }
}
Dictionary<string, string> _MELSysComp;
public Dictionary<string, string> MELSysComps
{
get { return _MELSysComp; }
set { _MELSysComp = value; }
}
private void importMELData_Click(object sender, EventArgs e)
{
DateTime dtStart = DateTime.Now;
ClearMELData();
MELTableAdapter.Fill(this.rOMasterDataSet.RO000003);
MELImportTableAdapter.Fill(this.rOImportDataSet.ImportMEL_qry);
DataTable dto = MELTableAdapter.GetData();
DrCount = dto.Rows[0];
DataTable dti = MELImportTableAdapter.GetData();
MELSystems = new Dictionary<string, string>();
MELSysComps = new Dictionary<string, string>();
int recsAdded = 0;
DateTime justASecHoney = DateTime.Now + TimeSpan.FromSeconds(10);
int lastAdded = 0;
DateTime lastTime = DateTime.Now;
foreach (DataRow dr in dti.Rows)
{
recsAdded++;
// Parameter Name Value Description
//Console.WriteLine("Parameter = '{0}', Name = '{1}', Value = '{2}', Description = '{3}'",
// dr["Parameter"], dr["Name"], dr["Value"], dr["Description"]);
MyStatus = dr["FullName"].ToString();
AddMEL(dr["SystemID"].ToString(), dr["SystemDesc"].ToString(), dr["ComponentID"].ToString(), dr["CompDesc"].ToString()
, dr["FullName"].ToString(), dr["ShortName"].ToString(), dr["Room"].ToString(), dr["Description"].ToString(), dr["CommonDesc"].ToString());
DateTime tNow = DateTime.Now;
if (tNow > justASecHoney)
{
int remaining = dti.Rows.Count - recsAdded;
TimeSpan elapsed = tNow - lastTime;
TimeSpan total = tNow - dtStart;
int processed = recsAdded - lastAdded;
lastTime = tNow;
lastAdded = recsAdded;
DateTime eta1 = tNow + TimeSpan.FromTicks(elapsed.Ticks * remaining / processed);
DateTime eta2 = tNow + TimeSpan.FromTicks(total.Ticks * remaining / recsAdded);
AddStatusText("{0}\t{1}\t{2}\t{3}\t{4}\t{5}", tNow.ToString("HH:mm:ss"), processed,
recsAdded, remaining, eta1.ToString("HH:mm:ss"), eta2.ToString("HH:mm:ss"));
justASecHoney += TimeSpan.FromSeconds(10);
}
}
AddStatusText("{0}\t{1}\t{2}\t{3}", DateTime.Now.ToString("HH:mm:ss"), recsAdded - lastAdded, recsAdded, 0);
MELTableAdapter.Update(DrCount);
DateTime dtEnd = DateTime.Now;
MyStatus = string.Format("{0} MEL ROs added in {1} seconds", dti.Rows.Count, TimeSpan.FromTicks(dtEnd.Ticks - dtStart.Ticks).TotalSeconds);
MessageBox.Show(string.Format("{0} MEL ROs added", dti.Rows.Count), "ROs Loaded", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void AddMEL(string systemID, string systemDesc, string ComponentID, string CompDesc, string FullName, string ShortName, string Room, string Description, string CommonDesc)
{
string parentid = AddMELSystemComponent(systemID,systemDesc,ComponentID,CompDesc);
string recid = GetNextMELRecID();
string rovalue = BuildMELROValue(FullName,ShortName,Room,Description,CommonDesc);
MELTableAdapter.Insert(recid, 5, parentid, FullName, DateTimeStamp, rovalue);
}
private string BuildMELROValue(string FullName, string ShortName, string Room, string Description, string CommonDesc)
{
FullName = FixSpecialCharacters(FullName);
ShortName = FixSpecialCharacters(ShortName);
Room = FixSpecialCharacters(Room);
Description = FixSpecialCharacters(Description);
CommonDesc = FixSpecialCharacters(CommonDesc);
return string.Format("<MEL MenuTitle=\"{0} - {3}\"><Short__Name>{1}</Short__Name><Full__Name>{0}" +
"</Full__Name><Description>{3}</Description><Room>{2}</Room></MEL>",FullName,ShortName,Room,Description,
CommonDesc); // ComonDesc will not load because it has no token {4}
}
private string GetNextMELRecID()
{
string nextRec = DrCount["Info"].ToString();
nextRec = string.Format("{0:x08}", Convert.ToInt32(nextRec, 16) + 1);
DrCount["Info"] = nextRec;
//MELTableAdapter.Update(DrCount);
//Console.WriteLine("ID = {0}", nextRec);
return nextRec;
}
private string AddMELSystemComponent(string systemID, string systemDesc, string ComponentID, string CompDesc)
{
string key = systemID + "|" + ComponentID;
if (!MELSysComps.ContainsKey(key))
{
string sysRecID = AddMELSystem(systemID, systemDesc);
string recid = GetNextMELRecID();
string compValue = BuildMELComponent(ComponentID,CompDesc);
MELTableAdapter.Insert(recid, 3, sysRecID, null, DateTimeStamp, compValue);
MELSysComps.Add(key, recid);
}
return MELSysComps[key];
}
private string BuildMELComponent(string ComponentID, string CompDesc)
{
ComponentID = FixSpecialCharacters(ComponentID);
CompDesc = FixSpecialCharacters(CompDesc);
return string.Format("<vlnGroup MenuTitle=\"{0} - {1}\"><Description>{1}" +
"</Description><Component__Type>{0}</Component__Type></vlnGroup>", ComponentID, CompDesc);
}
private string AddMELSystem(string systemID, string systemDesc)
{
if (!MELSystems.ContainsKey(systemID))
{
string recid = GetNextMELRecID();
string sysValue = BuildMELSystem(systemID,systemDesc);
MELTableAdapter.Insert(recid, 3, MELDBRecID, null, DateTimeStamp, sysValue);
MELSystems.Add(systemID, recid);
}
return MELSystems[systemID];
}
private string BuildMELSystem(string systemID, string systemDesc)
{
systemID = FixSpecialCharacters(systemID);
systemDesc = FixSpecialCharacters(systemDesc);
return string.Format("<vlnGroup GroupMenuItem=\"&lt;Component Type&gt; - &lt;Description&gt;\" GroupFieldsInUse=\"00000022 00000010\" MenuTitle=\"{0} - {1}\"><Description>{1}</Description><System>{0}</System></vlnGroup>", systemID, systemID);
}
private void AddStatusText(string format, params object []args)
{
tbStatus.Select(tbStatus.TextLength, 0);
tbStatus.SelectedText=string.Format(format, args) + "\r\n";
}
private void clearOldARPData_Click(object sender, EventArgs e)
{
ClearARPData();
}
private string ARPDBRecID;
private int ClearARPData()
{
ARPTableAdapter.Fill(this.rOMasterDataSet.RO000004);
DataTable dto = ARPTableAdapter.GetData();
List<DataRow> deleteList = new List<DataRow>();
foreach (DataRow dr in dto.Rows)
{
if (int.Parse(dr["RecType"].ToString()) == 3) // Remove Grouping
{
if (dr["ParentID"].ToString() != "00000000")
{
deleteList.Add(dr);
}
else
{
ARPDBRecID = dr["RecID"].ToString();
}
}
if (int.Parse(dr["RecType"].ToString()) == 5) // Remove ROs
{
deleteList.Add(dr);
}
}
int count = deleteList.Count;
while (deleteList.Count > 0)
{
DataRow dr = deleteList[0];
dr.Delete();
ARPTableAdapter.Update(dr);
deleteList.RemoveAt(0);
}
return count;
}
private Dictionary<string, string> _ARPDocuments;
public Dictionary<string, string> ARPDocuments
{
get { return _ARPDocuments; }
set { _ARPDocuments = value; }
}
private Dictionary<string, string> _ARPSystems;
public Dictionary<string, string> ARPSystems
{
get { return _ARPSystems; }
set { _ARPSystems = value; }
}
private void importARPData_Click(object sender, EventArgs e)
{
ARPImportTableAdapter.Fill(this.rOImportDataSet.ImportARP_tbl);
DateTime dtStart = DateTime.Now;
ClearARPData();
ARPTableAdapter.Fill(this.rOMasterDataSet.RO000004);
ARPImportTableAdapter.Fill(this.rOImportDataSet.ImportARP_tbl);
DataTable dto = ARPTableAdapter.GetData();
DrCount = dto.Rows[0];
DataTable dti = ARPImportTableAdapter.GetData();
ARPDocuments = new Dictionary<string, string>();
ARPSystems = new Dictionary<string, string>();
int recsAdded = 0;
DateTime justASecHoney = DateTime.Now + TimeSpan.FromSeconds(10);
int lastAdded = 0;
DateTime lastTime = DateTime.Now;
foreach (DataRow dr in dti.Rows)
{
recsAdded++;
// Parameter Name Value Description
//Console.WriteLine("Parameter = '{0}', Name = '{1}', Value = '{2}', Description = '{3}'",
// dr["Parameter"], dr["Name"], dr["Value"], dr["Description"]);
MyStatus = dr["Alarm"].ToString();
AddARP(dr["Document"].ToString(), dr["Alarm"].ToString(), dr["PointName"].ToString(), dr["Type"].ToString()
, dr["Value"].ToString(), dr["Description"].ToString(), dr["SystemID"].ToString(), dr["SysTitle"].ToString());
DateTime tNow = DateTime.Now;
if (tNow > justASecHoney)
{
int remaining = dti.Rows.Count - recsAdded;
TimeSpan elapsed = tNow - lastTime;
TimeSpan total = tNow - dtStart;
int processed = recsAdded - lastAdded;
lastTime = tNow;
lastAdded = recsAdded;
DateTime eta1 = tNow + TimeSpan.FromTicks(elapsed.Ticks * remaining / processed);
DateTime eta2 = tNow + TimeSpan.FromTicks(total.Ticks * remaining / recsAdded);
AddStatusText("{0}\t{1}\t{2}\t{3}\t{4}\t{5}", tNow.ToString("HH:mm:ss"), processed,
recsAdded, remaining, eta1.ToString("HH:mm:ss"), eta2.ToString("HH:mm:ss"));
justASecHoney += TimeSpan.FromSeconds(10);
}
}
AddStatusText("{0}\t{1}\t{2}\t{3}", DateTime.Now.ToString("HH:mm:ss"), recsAdded - lastAdded, recsAdded, 0);
ARPTableAdapter.Update(DrCount);
DateTime dtEnd = DateTime.Now;
MyStatus = string.Format("{0} ARP ROs added in {1} seconds", dti.Rows.Count, TimeSpan.FromTicks(dtEnd.Ticks - dtStart.Ticks).TotalSeconds);
MessageBox.Show(string.Format("{0} ARP ROs added", dti.Rows.Count), "ROs Loaded", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void AddARP(string document, string alarm, string pointName, string type, string value, string description, string systemID, string systemTitle)
{
string parentid = AddARPDocumentSystem(document,systemID,systemTitle);
string recid = GetNextARPRecID();
string rovalue = BuildARPROValue(alarm, pointName, type, value, description, systemID);
ARPTableAdapter.Insert(recid, 5, parentid, alarm, DateTimeStamp, rovalue);
}
private string BuildARPROValue(string alarm, string pointName, string type, string value, string description, string systemID)
{
alarm = FixSpecialCharacters(alarm);
pointName = FixSpecialCharacters(pointName);
type = FixSpecialCharacters(type);
value = FixSpecialCharacters(value);
description = FixSpecialCharacters(description);
systemID = FixSpecialCharacters(systemID);
return string.Format("<Alarms MenuTitle=\"{0} - {4}\"><Alarm>{0}</Alarm><PointName>{1}</PointName><Type>{2}</Type>" +
"<Alarm__Value>{3}</Alarm__Value><Description>{4}</Description><SystemID>{5}</SystemID></Alarms>",
alarm,pointName,type,value,description,systemID);
}
private string GetNextARPRecID()
{
string nextRec = DrCount["Info"].ToString();
nextRec = string.Format("{0:x08}", Convert.ToInt32(nextRec, 16) + 1);
DrCount["Info"] = nextRec;
return nextRec;
}
private string AddARPDocumentSystem(string document, string systemID, string systemTitle)
{
if (!ARPDocuments.ContainsKey(document))
{
string recid = GetNextARPRecID();
string documentValue = BuildARPDocument(document);
ARPTableAdapter.Insert(recid, 3, ARPDBRecID, null, DateTimeStamp, documentValue);
ARPDocuments.Add(document, recid);
}
if(document != "None") return ARPDocuments[document];
string parentID = ARPDocuments[document];
if (!ARPSystems.ContainsKey(systemID))
{
string recid = GetNextARPRecID();
string documentValue = BuildARPSystem(systemID,systemTitle);
ARPTableAdapter.Insert(recid, 3, parentID , null, DateTimeStamp, documentValue);
ARPSystems.Add(systemID, recid);
}
return ARPSystems[systemID];
}
private string BuildARPSystem(string systemID, string systemTitle)
{
systemID = FixSpecialCharacters(systemID);
systemTitle = FixSpecialCharacters(systemTitle);
return string.Format("<vlnGroup MenuTitle=\"{0} - {1}\"><Description>{1}</Description><System>{0}</System></vlnGroup>", systemID, systemTitle);
}
private string BuildARPDocument(string document)
{
if(document != "None")
return string.Format("<vlnGroup MenuTitle=\"{0}\"><Document>{0}</Document></vlnGroup>", document);
else
return string.Format("<vlnGroup GroupMenuItem=\"&lt;System&gt; - &lt;Description&gt;\" " +
"GroupFieldsInUse=\"0000001e 00000010\" MenuTitle=\"{0}\"><Document>{0}</Document></vlnGroup>",document);
}
private void updateToCPPSetpoints_Click(object sender, EventArgs e)
{
Dictionary<String, int> parentCount = new Dictionary<string, int>();
Dictionary<String, DataRow> parentDictionary = new Dictionary<string, DataRow>();
Dictionary<String, DataRow> roDictionary = new Dictionary<string, DataRow>();
ROMasterDataSet.RO000002DataTable dto = STPTableAdapter.GetData();
BuildSTPDictionaries(dto, parentCount, parentDictionary, roDictionary);
STPCPPImportTableAdapter.Fill(this.rOCPPImportDataSet.ImportSTP_qry);
ROCPPImportDataSet.ImportSTP_qryDataTable dti = STPCPPImportTableAdapter.GetData();
int updateCount = 0;
int updatePCount = 0;
foreach (DataRow dr in dti.Rows)
{
string accPageID = dr["Name"].ToString().Trim();
if (roDictionary.ContainsKey(accPageID))
{
DataRow dro = roDictionary[accPageID];
roDictionary.Remove(accPageID);
string info = BuildSTPROValue(dr["Name"].ToString(), dr["Value"].ToString(), dr["Description"].ToString());
string infoOld = dro["Info"].ToString();
if (info != infoOld)
{
dro["Info"] = info;
dro["ModDateTime"] = DateTimeStamp;
STPTableAdapter.Update(dro);
MyStatus = "Updating " + accPageID;
AddStatusText("Updating {0}", accPageID);
updateCount++;
}
}
else
{
//if dro is null because accpageid does not exist, need to add including figuring out parent status and adding parent if it does not exist
//get parent for new ro
//see if parent exists
MessageBox.Show("oh oh, new ro exists");
}
}
MyStatus = string.Format("{0} ROs Updated", updateCount);
AddStatusText("RO Rows Updated: {0}", updateCount);
// What has not been processed
updateCount = 0;
foreach (string key in roDictionary.Keys)
{
DataRow dr = roDictionary[key];
string parentID = dr["ParentID"].ToString().Trim();
dr.Delete();
STPTableAdapter.Update(dr);
MyStatus = string.Format("Deleting {0}", key);
AddStatusText("Deleting {0}", key);
updateCount++;
parentCount[parentID]--;
if (parentCount[parentID] == 0)
{
DataRow drp = parentDictionary[parentID];
string grandparentID = drp["ParentID"].ToString().Trim();
drp.Delete();
STPTableAdapter.Update(drp);
MyStatus = string.Format("Deleting Parent {0}", parentID);
AddStatusText("Deleting Parent {0}", parentID);
updatePCount++;
parentCount[grandparentID]--;
if (parentCount[grandparentID] == 0)
{
DataRow drgp = parentDictionary[grandparentID];
drgp.Delete();
STPTableAdapter.Update(drgp);
MyStatus = string.Format("Deleting GrandParent {0}", grandparentID);
AddStatusText("Deleting GrandParent {0}", grandparentID);
updatePCount++;
}
}
}
MyStatus = string.Format("{0} ROs Deleted, {1} RO Parent/GrandParent Ros Deleted", updateCount, updatePCount);
AddStatusText("RO Rows Deleted: {0}, RO Parent/GrandParent Rows Deleted {1}", updateCount, updatePCount);
}
private void BuildSTPDictionaries(ROMasterDataSet.RO000002DataTable dto, Dictionary<string, int> parentCount, Dictionary<string, DataRow> parentRow, Dictionary<string, DataRow> dataRow)
{
foreach (DataRow dr in dto.Rows)
{
if (int.Parse(dr["RecType"].ToString()) == 3) // Remove Grouping
{
if (dr["ParentID"].ToString() != "00000000")
{
parentRow.Add(dr["RecID"].ToString().Trim(), dr);
AddToParentCount(parentCount, dr["ParentID"].ToString().Trim());
}
}
if (int.Parse(dr["RecType"].ToString()) == 5) // Remove ROs
{
string accPageID = dr["AccPageID"].ToString().Trim();
dataRow.Add(accPageID, dr);
AddToParentCount(parentCount, dr["ParentID"].ToString().Trim());
}
}
}
private void BuildARPDictionaries(ROMasterDataSet.RO000004DataTable dto, Dictionary<string, int> parentCount, Dictionary<string, DataRow> parentRow, Dictionary<string, DataRow> dataRow)
{
foreach (DataRow dr in dto.Rows)
{
if (int.Parse(dr["RecType"].ToString()) == 3) // Remove Grouping
{
if (dr["ParentID"].ToString() != "00000000")
{
parentRow.Add(dr["RecID"].ToString().Trim(), dr);
AddToParentCount(parentCount, dr["ParentID"].ToString().Trim());
}
}
if (int.Parse(dr["RecType"].ToString()) == 5) // Remove ROs
{
string accPageID = dr["AccPageID"].ToString().Trim();
dataRow.Add(accPageID, dr);
AddToParentCount(parentCount, dr["ParentID"].ToString().Trim());
}
}
}
private void AddToParentCount(Dictionary<string, int> parentCount, string parentID)
{
if (!parentCount.ContainsKey(parentID))
parentCount.Add(parentID, 0);
parentCount[parentID]++;
}
private void BuildMELDictionaries(ROMasterDataSet.RO000003DataTable dto, Dictionary<string, int> parentCount, Dictionary<string, DataRow> parentRow, Dictionary<string, DataRow> dataRow)
{
foreach (DataRow dr in dto.Rows)
{
if (int.Parse(dr["RecType"].ToString()) == 3) // Remove Grouping
{
if (dr["ParentID"].ToString() != "00000000")
{
parentRow.Add(dr["RecID"].ToString().Trim(), dr);
AddToParentCount(parentCount, dr["ParentID"].ToString().Trim());
}
}
if (int.Parse(dr["RecType"].ToString()) == 5) // Remove ROs
{
string accPageID = dr["AccPageID"].ToString().Trim();
dataRow.Add(accPageID, dr);
AddToParentCount(parentCount, dr["ParentID"].ToString().Trim());
}
}
}
private void updateToCPPEquipment_Click(object sender, EventArgs e)
{
Dictionary<String, int> parentCount = new Dictionary<string, int>();
Dictionary<String, DataRow> parentDictionary = new Dictionary<string, DataRow>();
Dictionary<String, DataRow> roDictionary = new Dictionary<string, DataRow>();
ROMasterDataSet.RO000003DataTable dto = MELTableAdapter.GetData();
BuildMELDictionaries(dto, parentCount, parentDictionary, roDictionary);
MELCPPImportTableAdapter.Fill(this.rOCPPImportDataSet.ImportMEL_qry);
ROCPPImportDataSet.ImportMEL_qryDataTable dti = MELCPPImportTableAdapter.GetData();
int updateCount = 0;
int updatePCount = 0;
foreach (DataRow dr in dti.Rows)
{
string accPageID = dr["FullName"].ToString().Trim();
if (roDictionary.ContainsKey(accPageID))
{
DataRow dro = roDictionary[accPageID];
roDictionary.Remove(accPageID);
string info = BuildMELROValue(dr["Fullname"].ToString(), dr["ShortName"].ToString(), dr["Room"].ToString(), dr["Description"].ToString(), dr["CommonDesc"].ToString());
string infoOld = dro["Info"].ToString();
if (info != infoOld)
{
dro["Info"] = info;
dro["ModDateTime"] = DateTimeStamp;
MELTableAdapter.Update(dro);
MyStatus = "Updating " + accPageID;
AddStatusText("Updating {0}", accPageID);
updateCount++;
}
}
else
{
//if dro is null because accpageid does not exist, need to add including figuring out parent status and adding parent if it does not exist
//get parent for new ro
//see if parent exists
AddStatusText("********** new mel item '{0}' **********", accPageID);
}
}
MyStatus = string.Format("{0} ROs Updated", updateCount);
AddStatusText("RO Rows Updated: {0}", updateCount);
// What has not been processed
updateCount = 0;
foreach (string key in roDictionary.Keys)
{
if (key == "CCS-EJ-PLV200")
System.Threading.Thread.Sleep(1000);
DataRow dr = roDictionary[key];
string parentID = dr["ParentID"].ToString().Trim();
dr.Delete();
MELTableAdapter.Update(dr);
MyStatus = string.Format("Deleting {0}", key);
AddStatusText("Deleting '{0}'", key);
updateCount++;
parentCount[parentID]--;
if (parentCount[parentID] == 0)
{
DataRow drp = parentDictionary[parentID];
string grandparentID = drp["ParentID"].ToString().Trim();
drp.Delete();
MELTableAdapter.Update(drp);
MyStatus = string.Format("Deleting Parent {0}", parentID);
AddStatusText("Deleting Parent {0}", parentID);
updatePCount++;
parentCount[grandparentID]--;
if (parentCount[grandparentID] == 0)
{
DataRow drgp = parentDictionary[grandparentID];
drgp.Delete();
MELTableAdapter.Update(drgp);
MyStatus = string.Format("Deleting GrandParent {0}", grandparentID);
AddStatusText("Deleting GrandParent {0}", grandparentID);
updatePCount++;
}
}
}
MyStatus = string.Format("{0} ROs Deleted, {1} RO Parent/GrandParent Ros Deleted", updateCount, updatePCount);
AddStatusText("RO Rows Deleted: {0}, RO Parent/GrandParent Rows Deleted {1}", updateCount, updatePCount);
}
private void updateToCPPAlarms_Click(object sender, EventArgs e)
{
Dictionary<String, int> parentCount = new Dictionary<string, int>();
Dictionary<String, DataRow> parentDictionary = new Dictionary<string, DataRow>();
Dictionary<String, DataRow> roDictionary = new Dictionary<string, DataRow>();
ROMasterDataSet.RO000004DataTable dto = ARPTableAdapter.GetData();
BuildARPDictionaries(dto, parentCount, parentDictionary, roDictionary);
//why is this not a query versus a table
ARPCPPImportTableAdapter.Fill(this.rOCPPImportDataSet.ImportARP_tbl);
ROCPPImportDataSet.ImportARP_tblDataTable dti = ARPCPPImportTableAdapter.GetData();
int updateCount = 0;
int updatePCount = 0;
int addCount = 0;
foreach (DataRow dr in dti.Rows)
{
string accPageID = dr["Alarm"].ToString().Trim();
if (roDictionary.ContainsKey(accPageID))
{
DataRow dro = roDictionary[accPageID];
roDictionary.Remove(accPageID);
string info = BuildARPROValue(dr["Alarm"].ToString(), dr["PointName"].ToString(), dr["Type"].ToString(), dr["Value"].ToString(), dr["Description"].ToString(), dr["SystemID"].ToString());
string infoOld = dro["Info"].ToString();
if (info != infoOld)
{
dro["Info"] = info;
dro["ModDateTime"] = DateTimeStamp;
ARPTableAdapter.Update(dro);
MyStatus = "Updating " + accPageID;
AddStatusText("Updating {0}", accPageID);
updateCount++;
}
}
else
{
//if dro is null because accpageid does not exist, need to add including figuring out parent status and adding parent if it does not exist
//get parent for new ro
//see if parent exists
AddStatusText("********** new arp item '{0}' **********", accPageID);
addCount++;
}
}
MyStatus = string.Format("{0} ROs Updated", updateCount);
AddStatusText("RO Rows Updated: {0}", updateCount);
AddStatusText("RO Rows Added: {0}", addCount);
// What has not been processed
updateCount = 0;
foreach (string key in roDictionary.Keys)
{
DataRow dr = roDictionary[key];
string parentID = dr["ParentID"].ToString().Trim();
dr.Delete();
ARPTableAdapter.Update(dr);
MyStatus = string.Format("Deleting {0}", key);
AddStatusText("Deleting '{0}'", key);
updateCount++;
parentCount[parentID]--;
if (parentCount[parentID] == 0)
{
DataRow drp = parentDictionary[parentID];
string grandparentID = drp["ParentID"].ToString().Trim();
drp.Delete();
ARPTableAdapter.Update(drp);
MyStatus = string.Format("Deleting Parent {0}", parentID);
AddStatusText("Deleting Parent {0}", parentID);
updatePCount++;
parentCount[grandparentID]--;
if (parentCount[grandparentID] == 0)
{
DataRow drgp = parentDictionary[grandparentID];
drgp.Delete();
ARPTableAdapter.Update(drgp);
MyStatus = string.Format("Deleting GrandParent {0}", grandparentID);
AddStatusText("Deleting GrandParent {0}", grandparentID);
updatePCount++;
}
}
}
MyStatus = string.Format("{0} ROs Deleted, {1} RO Parent/GrandParent Ros Deleted", updateCount, updatePCount);
AddStatusText("RO Rows Deleted: {0}, RO Parent/GrandParent Rows Deleted {1}", updateCount, updatePCount);
}
}
}