2422 lines
92 KiB
C#
2422 lines
92 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Threading;
|
|
using System.Windows.Forms;
|
|
using Maser.Feanor.Model;
|
|
using Maser.Feanor.Biz;
|
|
using Maser.Feanor.MIDSInterface;
|
|
using System.Collections.ObjectModel;
|
|
using System.Collections.Specialized;
|
|
using System.IO;
|
|
using System.Diagnostics;
|
|
using System.Net;
|
|
using System.Data.SqlClient;
|
|
|
|
namespace FeanorProjects
|
|
{
|
|
public partial class FeanorProjects : Form
|
|
{
|
|
//private const string BuildInformation = "Palantir - Project Manager";
|
|
private const string PathToAnalysisTool = @"C:\META\META.exe"; // Location of META, place META folder (with META.exe) in C-drive!
|
|
|
|
// The dgv content always corresponds to _ProjectsContent.
|
|
ObservableCollection<Project> _ProjectsContent = new ObservableCollection<Project>();
|
|
|
|
// The listboxes with chambers always corresponds to _ChambersContent.
|
|
ObservableCollection<Chamber> _ChambersContent = new ObservableCollection<Chamber>();
|
|
Boolean[] _ChambersContentSelected;
|
|
|
|
// The listboxes with Sensor always corresponds to _SensorsContent.
|
|
ObservableCollection<Sensor> _SensorsContent = new ObservableCollection<Sensor>();
|
|
Boolean[] _SensorsContentSelected;
|
|
|
|
Project _Project = new Project();
|
|
Chamber _Chamber = new Chamber();
|
|
|
|
bool CMS2PC = true;
|
|
|
|
public FeanorProjects()
|
|
{
|
|
|
|
try
|
|
{
|
|
|
|
using (SqlConnection connection = new SqlConnection("Data Source=tcp:10.126.21.47\\FEANOR,1434; Initial Catalog=FEANOR; User ID=sa; Password=resam@123resam; timeout=15; Persist Security Info=True; TrustServerCertificate=True"))
|
|
{
|
|
connection.Open();
|
|
Console.WriteLine("Succesvolle verbinding!");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("Fout bij verbinden: " + ex.Message);
|
|
}
|
|
|
|
InitializeComponent();
|
|
|
|
try
|
|
{
|
|
string hostName = Dns.GetHostName(); // retrieve host name
|
|
Console.WriteLine(hostName);
|
|
if (hostName != "MEEU010LAB00003") // only show NodeStatus button for CMS2 PC
|
|
CMS2PC = false;
|
|
|
|
}
|
|
catch { }
|
|
|
|
_ProjectsContent.CollectionChanged += projects_CollectionChanged;
|
|
_ChambersContent.CollectionChanged += chambers_CollectionChanged;
|
|
_SensorsContent.CollectionChanged += sensors_CollectionChanged;
|
|
|
|
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly(); // report build version
|
|
string exe = System.IO.Path.GetFullPath(ass.Location);
|
|
DateTime dt = new System.IO.FileInfo(exe).LastWriteTimeUtc;
|
|
this.Text = String.Format("Feanor - Projects" + " v{0:0000}{1:00}{2:00}", dt.Year, dt.Month, dt.Day);
|
|
}
|
|
|
|
public Project SelectedProject
|
|
{
|
|
|
|
get
|
|
{
|
|
int i;
|
|
try
|
|
{
|
|
if(dgvProjects.Rows.Count >0)
|
|
{
|
|
i = dgvProjects.CurrentCell.RowIndex;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
|
|
}
|
|
catch { i = -1; }
|
|
|
|
if (i < 0)
|
|
return null;
|
|
|
|
return _ProjectsContent[i];
|
|
}
|
|
}
|
|
|
|
|
|
void projects_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
|
{
|
|
dgvProjects_Populate();
|
|
}
|
|
|
|
void chambers_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
|
{
|
|
lboxChambers_Populate();
|
|
_ChambersContentSelected = new bool[_ChambersContent.Count];
|
|
}
|
|
|
|
void sensors_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
|
{
|
|
dgvSensors_Populate();
|
|
_SensorsContentSelected = new bool[_SensorsContent.Count];
|
|
}
|
|
|
|
private void FeanorProjects_Load(object sender, EventArgs e)
|
|
{
|
|
#region Center the form
|
|
int w = Screen.PrimaryScreen.Bounds.Width;
|
|
int h = Screen.PrimaryScreen.Bounds.Height;
|
|
int x = (int)Math.Max(0, Math.Ceiling(0.5 * w - 0.5 * this.Width));
|
|
int y = (int)Math.Max(0, Math.Ceiling(0.5 * h - 0.5 * this.Height));
|
|
this.Location = new Point(x, y);
|
|
#endregion Center the form
|
|
|
|
pnlNewProject.Location = new Point(0, menu.Height);
|
|
pnlNewProject.Size = new Size(1260, 894);
|
|
pnlViewProjects.Location = new Point(0, menu.Height);
|
|
pnlViewProjects.Size = new Size(1260, 894);
|
|
pnlExport.Location = new Point(0, menu.Height);
|
|
pnlExport.Size = new Size(1260, 894);
|
|
|
|
// Datagridview is not sortable. Content shall be consistant with ordering in var dgvProjectsContent
|
|
foreach (DataGridViewColumn dCol in dgvProjects.Columns)
|
|
dCol.SortMode = DataGridViewColumnSortMode.NotSortable;
|
|
dgvProjects.Columns[0].Width = 130;
|
|
dgvProjects.Columns[1].Width = 80;
|
|
dgvProjects.Columns[2].Width = 300;
|
|
dgvProjects.Columns[3].Width = 200;
|
|
dgvProjects.Columns[4].Width = 170;
|
|
|
|
|
|
// datagridview dgvLinkChambers
|
|
dgvLinkChambers.Columns[0].Width = dgvLinkChambers.Width - 2;
|
|
dgvLinkChambers.ScrollBars = ScrollBars.Vertical;
|
|
dgvLinkChambers.DefaultCellStyle.ForeColor = Color.LightGray;
|
|
dgvLinkChambers.DefaultCellStyle.SelectionForeColor = Color.Black;
|
|
dgvLinkChambers.DefaultCellStyle.SelectionBackColor = dgvLinkChambers.DefaultCellStyle.BackColor;
|
|
dgvLinkChambers.BackgroundColor = dgvLinkChambers.DefaultCellStyle.BackColor;
|
|
dgvLinkChambers.CellBorderStyle = DataGridViewCellBorderStyle.None;
|
|
|
|
// datagridview dgvSensors
|
|
dgvSensors.Columns[0].Width = dgvSensors.Width - 2;
|
|
dgvSensors.ScrollBars = ScrollBars.Vertical;
|
|
dgvSensors.DefaultCellStyle.ForeColor = Color.LightGray;
|
|
dgvSensors.DefaultCellStyle.SelectionForeColor = Color.Black;
|
|
dgvSensors.DefaultCellStyle.SelectionBackColor = dgvSensors.DefaultCellStyle.BackColor;
|
|
dgvSensors.BackgroundColor = dgvSensors.DefaultCellStyle.BackColor;
|
|
dgvSensors.CellBorderStyle = DataGridViewCellBorderStyle.None;
|
|
|
|
// Shortcuts to menu
|
|
menuViewFind.ShortcutKeys = Keys.F3;
|
|
menuNewProject.ShortcutKeys = Keys.F4;
|
|
menuViewInProgress.ShortcutKeys = Keys.F5;
|
|
menuViewFinished.ShortcutKeys = Keys.F6;
|
|
menuViewAll.ShortcutKeys = Keys.F7;
|
|
|
|
// Start current UTC clock update timer
|
|
timerUtcClock.Start(); timerUtcClock_Tick(null, null);
|
|
|
|
// Go to start screen
|
|
ShowProjects(ProjectStatus.InProgress);
|
|
}
|
|
|
|
|
|
private void ShowProjects(ProjectStatus pStatus)
|
|
{
|
|
//gbProjectDetails.Visible = false;
|
|
|
|
pnlViewProjects.BringToFront();
|
|
|
|
// List projects in dgv
|
|
List<Project> projects = new List<Project>();
|
|
try
|
|
{
|
|
List<Project> list;
|
|
switch (pStatus)
|
|
{
|
|
case ProjectStatus.Finished:
|
|
list = new Projects().GetAllFinished();
|
|
gbProjectList.Text = String.Format("Finished projects ({0})", list.Count);
|
|
break;
|
|
case ProjectStatus.InProgress:
|
|
list = new Projects().GetAllActive();
|
|
gbProjectList.Text = String.Format("Projects in progress ({0})", list.Count);
|
|
break;
|
|
case ProjectStatus.FinishedLastMonth:
|
|
list = new Projects().GetAllFinishedLastMonth();
|
|
gbProjectList.Text = String.Format("Projects finished last month ({0})", list.Count);
|
|
break;
|
|
case ProjectStatus.FinishedLastWeek:
|
|
list = new Projects().GetAllFinishedLastWeek();
|
|
gbProjectList.Text = String.Format("Projects finished last week ({0})", list.Count);
|
|
break;
|
|
default:
|
|
list = new Projects().GetAll();
|
|
gbProjectList.Text = String.Format("Projects ({0})", list.Count);
|
|
break;
|
|
}
|
|
_ProjectsContent.CollectionChanged -= projects_CollectionChanged; // Unsubscribe to prevent reoccuring firing
|
|
_ProjectsContent.Clear();
|
|
foreach (Project p in list)
|
|
{
|
|
_ProjectsContent.Add(p);
|
|
}
|
|
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
MessageBox.Show("Could not retrieve projects from database!" + ex.Message, "Projects", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
_ProjectsContent.Clear();
|
|
}
|
|
finally
|
|
{
|
|
// Subscribe again and fire
|
|
_ProjectsContent.CollectionChanged += projects_CollectionChanged;
|
|
projects_CollectionChanged(null,null);
|
|
}
|
|
//dgvProjects.ClearSelection();
|
|
}
|
|
|
|
|
|
private void dgvProjects_Populate()
|
|
{
|
|
lbChamberConditions.Items.Clear();
|
|
if (_ProjectsContent == null)
|
|
{
|
|
gbProjectList.Text = "Projects (0)";
|
|
dgvProjects.Rows.Clear();
|
|
return;
|
|
}
|
|
if (_ProjectsContent.Count == 0)
|
|
{
|
|
gbProjectList.Text = "Projects (0)";
|
|
dgvProjects.Rows.Clear();
|
|
return;
|
|
}
|
|
|
|
// Remove enough rows or add missing ones
|
|
while (dgvProjects.Rows.Count > _ProjectsContent.Count)
|
|
dgvProjects.Rows.RemoveAt(0);
|
|
if(dgvProjects.Rows.Count < _ProjectsContent.Count)
|
|
dgvProjects.Rows.Add(_ProjectsContent.Count- dgvProjects.Rows.Count);
|
|
|
|
|
|
Chambers cBiz = new Chambers();
|
|
String c = "";
|
|
|
|
for (int i = 0; i < _ProjectsContent.Count; i++)
|
|
{
|
|
// Project info
|
|
Project p = _ProjectsContent[i];
|
|
|
|
if(p.ProjectDescription == "Maintenance and calibration")
|
|
{
|
|
dgvProjects[0, i].Value = String.Format("I{0:00000} sub {1:00} step {2:00}", p.ProjectID, p.SubProject, p.Step);
|
|
}
|
|
else
|
|
{
|
|
dgvProjects[0, i].Value = String.Format("P{0:00000} sub {1:00} step {2:00}", p.ProjectID, p.SubProject, p.Step);
|
|
}
|
|
|
|
|
|
dgvProjects[2, i].Value = p.StepDescription;
|
|
dgvProjects[4, i].Value = p.Customer;
|
|
//dgvProjects[5, i].Value = String.Format("{0:0}h", p.TotalTime);
|
|
|
|
// Duration
|
|
double min = p.Stop == null ? (Time.UTC - p.Start).TotalMinutes : ((DateTime)p.Stop - p.Start).TotalMinutes;
|
|
double hrs = Math.Floor(min / 60);
|
|
min -= hrs * 60;
|
|
dgvProjects[1, i].Value = String.Format("{0:0}h{1:0}", hrs, min);
|
|
|
|
// Chamber description
|
|
try { c = cBiz.GetByPK(p.Chamber).MIDSandDescription; } catch { c = "Chamber not found!"; }
|
|
dgvProjects[3, i].Value = c;
|
|
|
|
dgvProjects.Rows[i].DefaultCellStyle.ForeColor = System.Drawing.SystemColors.ControlText;
|
|
|
|
try
|
|
{
|
|
Color rowColor = MIDSinterface.RowColor(cBiz.GetByPK(p.Chamber).MIDS); // obtain row color (from MIDS) for each chamber
|
|
dgvProjects.Rows[i].DefaultCellStyle.BackColor = rowColor;
|
|
}
|
|
catch { }
|
|
}
|
|
}
|
|
|
|
private void lboxChambers_Populate() // Lijst met actieve kamers
|
|
{
|
|
// Handles lboxChambersNew, lboxChambersDetails & dgvLinkChambers
|
|
lboxChambersNew.Items.Clear();
|
|
lboxChambersDetails.Items.Clear();
|
|
|
|
if (_ChambersContent == null)
|
|
{
|
|
gbNewChamber.Text = "Chambers (0)";
|
|
return;
|
|
}
|
|
|
|
// Update all listboxes containing chambers info.
|
|
foreach (Chamber c in _ChambersContent)
|
|
{
|
|
lboxChambersNew.Items.Add(c.MIDSandDescription);
|
|
lboxChambersDetails.Items.Add(c.MIDSandDescription);
|
|
}
|
|
gbNewChamber.Text = string.Format("Chambers ({0})", _ChambersContent.Count);
|
|
|
|
|
|
// dgvLinkChambers
|
|
//this.dgvLinkChambers.SelectionChanged -= new System.EventHandler(this.dgvLinkChambers_SelectionChanged);
|
|
while (dgvLinkChambers.Rows.Count > 0)
|
|
dgvLinkChambers.Rows.RemoveAt(0);
|
|
|
|
if (_ChambersContent.Count > 0)
|
|
dgvLinkChambers.Rows.Add(_ChambersContent.Count);
|
|
|
|
for (int i = 0; i < _ChambersContent.Count; i++)
|
|
dgvLinkChambers[0, i].Value = _ChambersContent[i].MIDSandDescription;
|
|
//this.dgvLinkChambers.SelectionChanged += new System.EventHandler(this.dgvLinkChambers_SelectionChanged);
|
|
}
|
|
|
|
private void dgvSensors_Populate()
|
|
{
|
|
if (_SensorsContent == null)
|
|
{
|
|
dgvSensors.Rows.Clear();
|
|
return;
|
|
}
|
|
if (_SensorsContent.Count == 0)
|
|
{
|
|
dgvSensors.Rows.Clear();
|
|
return;
|
|
}
|
|
|
|
// Remove enough rows or add missing ones
|
|
while (dgvSensors.Rows.Count > _SensorsContent.Count)
|
|
dgvSensors.Rows.RemoveAt(0);
|
|
if (dgvSensors.Rows.Count < _SensorsContent.Count)
|
|
dgvSensors.Rows.Add(_SensorsContent.Count - dgvSensors.Rows.Count);
|
|
|
|
for (int i = 0; i < _SensorsContent.Count; i++)
|
|
{
|
|
dgvSensors[0, i].Value = _SensorsContent[i].ListDescription;
|
|
//Console.WriteLine(_SensorsContent[i].ListDescription);
|
|
}
|
|
}
|
|
|
|
|
|
private void ShowPanelNewProject()
|
|
{
|
|
pnlNewProject.BringToFront();
|
|
lbNewStepSelectList.Items.Clear();
|
|
lbNewSubProjectSelectList.Items.Clear();
|
|
|
|
// List chambers
|
|
try
|
|
{
|
|
List<Chamber> chambers = new Chambers().GetAllActive(); // All chambers where active == 1
|
|
|
|
_ChambersContent.CollectionChanged -= chambers_CollectionChanged;
|
|
_ChambersContent.Clear();
|
|
foreach (Chamber c in chambers)
|
|
{
|
|
_ChambersContent.Add(c); // Add all chambers
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Could not retrieve chambers from database!" + ex.Message, "Projects", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
_ChambersContent.Clear();
|
|
}
|
|
|
|
finally
|
|
{
|
|
txtbNewProjectNumber.Text = "";
|
|
txtbNewSubprojectNumber.Text = "";
|
|
txtbNewStepNumber.Text = "";
|
|
cboxInvProject.Checked = false;
|
|
txtbNewCustomerDescription.Text = "";
|
|
txtbNewProjectDescription.Text = "";
|
|
txtbNewSubProjectDescription.Text = "";
|
|
txtbNewStepDescription.Text = "";
|
|
txtbChamberNumber.Text = "";
|
|
|
|
|
|
// Subscribe again and fire
|
|
_ChambersContent.CollectionChanged += chambers_CollectionChanged;
|
|
chambers_CollectionChanged(null, null); // Update chambers list
|
|
}
|
|
}
|
|
|
|
|
|
private void btnNewProjectFindMIDS_Click(object sender, EventArgs e) // FIND button
|
|
{
|
|
// retreive data inputted by user
|
|
string projectnumb;
|
|
string subprojectnumb;
|
|
string stepnumb;
|
|
|
|
// Remove 'P' or 'p' and 'I' or 'i' from projectnumber
|
|
string NewProjectNumber = txtbNewProjectNumber.Text;
|
|
if (NewProjectNumber.StartsWith("p") || NewProjectNumber.StartsWith("P") || NewProjectNumber.StartsWith("i") || NewProjectNumber.StartsWith("I"))
|
|
{
|
|
projectnumb = NewProjectNumber.Substring(1);
|
|
}
|
|
|
|
|
|
if (txtbNewProjectNumber.Text != "")
|
|
{
|
|
projectnumb = txtbNewProjectNumber.Text;
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Please input project number");
|
|
return;
|
|
}
|
|
if (txtbNewSubprojectNumber.Text != "")
|
|
{
|
|
subprojectnumb = txtbNewSubprojectNumber.Text;
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Please input sub project number");
|
|
return;
|
|
}
|
|
if (txtbNewStepNumber.Text != "")
|
|
{
|
|
stepnumb = txtbNewStepNumber.Text;
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Please input step number");
|
|
return;
|
|
}
|
|
|
|
|
|
if(cboxInvProject.Checked == true) // INV project
|
|
{
|
|
Console.WriteLine("Inventory Project (I)");
|
|
|
|
try
|
|
{
|
|
Project p = MIDSinterface.GetINVProject(Int32.Parse(projectnumb), Int32.Parse(subprojectnumb), Int32.Parse(stepnumb));
|
|
|
|
// onderstaande is wat het programma nodig heeft!
|
|
txtbNewCustomerDescription.Text = p.Customer;
|
|
txtbNewProjectDescription.Text = p.ProjectDescription;
|
|
txtbNewSubProjectDescription.Text = p.SubProjectDescription;
|
|
txtbNewStepDescription.Text = p.StepDescription;
|
|
|
|
|
|
// Pre-Select chamber from planning in MIDS
|
|
|
|
string chamberNumb = projectnumb.ToString().Substring(2);
|
|
Console.WriteLine("chambernumb");
|
|
Console.WriteLine(chamberNumb);
|
|
|
|
Chamber plannedChamber = MIDSinterface.GetPlannedINVChamber(Int32.Parse(projectnumb), Int32.Parse(subprojectnumb), Int32.Parse(stepnumb));
|
|
Console.WriteLine("Planned: ");
|
|
Console.WriteLine(plannedChamber.MIDS);
|
|
|
|
try // find planned chamber in MIDS
|
|
{
|
|
for (int i = 0; i < lboxChambersNew.Items.Count; i++)
|
|
{
|
|
Chamber c = _ChambersContent[i];
|
|
Console.WriteLine(c.MIDS);
|
|
|
|
if (c.MIDS == Int32.Parse(chamberNumb)) // if (c.MIDS == Int32.Parse(chamberNumb))
|
|
{
|
|
lboxChambersNew.SelectedIndex = i;
|
|
|
|
break;
|
|
}
|
|
// }
|
|
}
|
|
|
|
txtbChamberNumber.Text = chamberNumb;
|
|
}
|
|
catch
|
|
{
|
|
// do nothing
|
|
Console.WriteLine("error during retrieving (I) data");
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
txtbNewCustomerDescription.Text = "n/a";
|
|
txtbNewProjectDescription.Text = "n/a";
|
|
txtbNewSubProjectDescription.Text = "n/a";
|
|
txtbNewStepDescription.Text = "n/a";
|
|
Console.WriteLine("error during retrieving (I) data");
|
|
}
|
|
|
|
|
|
}
|
|
else // P project
|
|
{
|
|
try
|
|
{
|
|
// get project data from MIDS
|
|
_Project = MIDSinterface.GetProject(int.Parse(projectnumb), int.Parse(subprojectnumb), int.Parse(stepnumb));
|
|
|
|
_Chamber = MIDSinterface.GetPlannedChamber(int.Parse(projectnumb), int.Parse(subprojectnumb), int.Parse(stepnumb));
|
|
|
|
txtbChamberNumber.Text = _Chamber.MIDS.ToString();
|
|
|
|
Console.WriteLine("Planned: ");
|
|
Console.WriteLine(_Chamber.MIDS);
|
|
|
|
// output project number, subproject numer and step
|
|
txtbNewProjectNumber.Text = projectnumb;
|
|
txtbNewSubprojectNumber.Text = subprojectnumb;
|
|
txtbNewStepNumber.Text = stepnumb;
|
|
|
|
// output project descriptions
|
|
txtbNewCustomerDescription.Text = _Project.Customer;
|
|
txtbNewProjectDescription.Text = _Project.ProjectDescription;
|
|
txtbNewSubProjectDescription.Text = _Project.SubProjectDescription;
|
|
txtbNewStepDescription.Text = _Project.StepDescription;
|
|
|
|
|
|
Console.WriteLine("find planned chamber in MIDS");
|
|
try // find planned chamber in MIDS
|
|
{
|
|
for (int i = 0; i < lboxChambersNew.Items.Count; i++)
|
|
{
|
|
Chamber c = _ChambersContent[i];
|
|
|
|
Console.WriteLine(c.MIDS);
|
|
|
|
|
|
if (_Chamber.MIDS == 0) // if no planned chamber from mids --> not possible to select chamber
|
|
{
|
|
break;
|
|
}
|
|
else // get planned chamber from mids
|
|
{
|
|
if (c.MIDS == _Chamber.MIDS) // if (c.MIDS == Int32.Parse(chamberNumb))
|
|
{
|
|
lboxChambersNew.SelectedIndex = i;
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
catch
|
|
{
|
|
// do nothing
|
|
Console.WriteLine("error during matching chambers");
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
catch
|
|
{
|
|
txtbNewCustomerDescription.Text = "n/a";
|
|
txtbNewProjectDescription.Text = "n/a";
|
|
txtbNewSubProjectDescription.Text = "n/a";
|
|
txtbNewStepDescription.Text = "n/a";
|
|
Console.WriteLine("error during retrieving (P) data");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
private void btnStartNewProject_Click(object sender, EventArgs e) // START button
|
|
{
|
|
|
|
int project = 0;
|
|
if (!Int32.TryParse(txtbNewProjectNumber.Text, out project))
|
|
return;
|
|
|
|
int sub = 0;
|
|
if (!Int32.TryParse(txtbNewSubprojectNumber.Text, out sub))
|
|
return;
|
|
|
|
int step = 0;
|
|
if (!Int32.TryParse(txtbNewStepNumber.Text, out step))
|
|
return;
|
|
|
|
string projectDescr = txtbNewProjectDescription.Text;
|
|
if (projectDescr.Length < 4)
|
|
{
|
|
MessageBox.Show("Project/sub/step does not exist");
|
|
return;
|
|
}
|
|
|
|
string subDescr = txtbNewSubProjectDescription.Text;
|
|
if (subDescr.Length < 4)
|
|
{
|
|
MessageBox.Show("Project/sub/step does not exist");
|
|
return;
|
|
}
|
|
|
|
string stepDescr = txtbNewStepDescription.Text;
|
|
if (stepDescr.Length < 4)
|
|
{
|
|
MessageBox.Show("Project/sub/step does not exist");
|
|
return;
|
|
}
|
|
|
|
string customer = txtbNewCustomerDescription.Text;
|
|
if (customer.Length < 2)
|
|
{
|
|
MessageBox.Show("Project/sub/step does not exist");
|
|
return;
|
|
}
|
|
|
|
if (lboxChambersNew.SelectedIndex < 0) // if there is no chamber selected
|
|
{
|
|
MessageBox.Show("No chamber selected!\n", "New project", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
// Selected chamber from list
|
|
Chamber chamber = _ChambersContent[lboxChambersNew.SelectedIndex];
|
|
|
|
|
|
if(stepDescr.Length > 250)
|
|
{
|
|
stepDescr = stepDescr.Substring(0, 254);
|
|
}
|
|
|
|
|
|
int TotalTime = 12345;
|
|
|
|
// Create new project
|
|
// format: Project(Int32 PK, Int32 chamber, DateTime start, DateTime? stop, Int32? ProjectID, String ProjectDescription, Int32? SubProject, String SubProjectDescription, Int32? Step, String StepDescription, String CustomerDescription)
|
|
Project P = new Project(-1, chamber.PK, Time.UTC - new TimeSpan(0,5,0), null, project, projectDescr, sub, subDescr, step, stepDescr, customer,TotalTime);
|
|
|
|
|
|
if (cboxInvProject.Checked == true) // Inventory project (I)
|
|
{
|
|
|
|
Console.WriteLine(chamber.MIDS);
|
|
|
|
Console.WriteLine(subDescr.ToString());
|
|
string checkSub = subDescr.Substring(0); // was 0,11
|
|
Console.WriteLine(checkSub);
|
|
string devID = project.ToString();
|
|
devID = devID.Substring(2);
|
|
Console.WriteLine("DevID:");
|
|
Console.WriteLine(devID);
|
|
|
|
|
|
if (checkSub == "Calibration")
|
|
{
|
|
|
|
Console.WriteLine("Calibration");
|
|
Console.WriteLine(String.Format("Z:\\inventory\\{0:00000}\\calibration\\{1}.{2} calibration", Int32.Parse(devID), project, sub));
|
|
|
|
if (!Directory.Exists(String.Format("Z:\\inventory\\{0:00000}\\calibration", Int32.Parse(devID), project, project, sub)))
|
|
{
|
|
DialogResult dr_path = MessageBox.Show("The inventory project folder is not found.\nAre you sure the project information is correct?", "New project", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
|
|
if (dr_path != DialogResult.Yes)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else // service project
|
|
{
|
|
Console.WriteLine("Service");
|
|
Console.WriteLine(String.Format("Z:\\inventory\\{0:00000}\\service", Int32.Parse(devID), project, sub));
|
|
|
|
|
|
if (!Directory.Exists(String.Format("Z:\\inventory\\{0:00000}\\service", Int32.Parse(devID), project, sub)))
|
|
{
|
|
DialogResult dr_path = MessageBox.Show("The inventory project folder is not found.\nAre you sure the project information is correct?", "New project", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
|
|
if (dr_path != DialogResult.Yes)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("Check directory for Project (P)");
|
|
// Check if map exists on server, if not is project info ok?
|
|
Int32 Year = (Int32)Math.Floor((double)project / 10000) + 2000;
|
|
Console.WriteLine((String.Format("Z:\\projects\\{0}\\P{1:00000}\\sub{2}", Year, project, sub)));
|
|
if (!Directory.Exists(String.Format("Z:\\projects\\{0}\\P{1:00000}\\sub{2}",Year, project, sub)))
|
|
{
|
|
DialogResult dr_path = MessageBox.Show("The project folder is not found.\nAre you sure the project information is correct?", "New project", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
|
|
if (dr_path != DialogResult.Yes)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
{
|
|
P.PK = new Projects().Add(P);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Could not start project!\n\n" + ex.Message, "New project", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
// Refresh dgvProjectsContent and select project in current project list.
|
|
ShowProjects(ProjectStatus.InProgress);
|
|
for(int i =0;i<_ProjectsContent.Count;i++)
|
|
{
|
|
if (_ProjectsContent[i].PK == P.PK)
|
|
{
|
|
dgvProjects.Rows[i].Selected = true;
|
|
dgvProjects_MouseClick(null, null);
|
|
break;
|
|
}
|
|
}
|
|
gbProjectDetails.Visible = false;
|
|
}
|
|
|
|
|
|
private void dgvProjects_MouseClick(object sender, MouseEventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
|
|
|
|
|
|
|
|
if (SelectedProject == null) // if no project is selected
|
|
{
|
|
gbProjectDetails.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("selected "+ SelectedProject.ProjectID.ToString());
|
|
Console.WriteLine(dgvProjects.CurrentCell.RowIndex.ToString());
|
|
Console.WriteLine(_ProjectsContent[dgvProjects.CurrentCell.RowIndex].ProjectID.ToString());
|
|
|
|
|
|
// if project is selected
|
|
ShowProjectDetails(SelectedProject);
|
|
gbProjectDetails.Visible = true;
|
|
|
|
if (SelectedProject.Stop != null) // if project is finished
|
|
{
|
|
btnStopReReset.Visible = true;
|
|
}
|
|
else
|
|
{
|
|
btnStopReReset.Visible = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ShowProjectDetails(Project project)
|
|
{
|
|
lbChamberConditions.Items.Clear();
|
|
// Labels
|
|
if (project.ProjectDescription == "Maintenance and calibration")
|
|
{
|
|
ProjectIDlabel.Text = string.Format("I{0:000000}\n\n", project.ProjectID);
|
|
}
|
|
else
|
|
{
|
|
ProjectIDlabel.Text = string.Format("P{0:000000}\n\n", project.ProjectID);
|
|
}
|
|
|
|
ProjectSubLabel.Text = string.Format("Sub {0:0}\n", project.SubProject);
|
|
ProjectStepLabel.Text = string.Format("Step {0:0}\n", project.Step);
|
|
|
|
ProjectCustomerLabel.Text = project.Customer;
|
|
ProjectDescriptionLabel.Text = project.ProjectDescription;
|
|
SubProjectLabel.Text = project.SubProjectDescription;
|
|
|
|
StepLabel.Text = project.StepDescription;
|
|
|
|
// Duration
|
|
Double hrs = (project.Stop == null) ? (Time.UTC - project.Start).TotalHours : ((DateTime)project.Stop - project.Start).TotalHours;
|
|
string duration = "";
|
|
if (hrs < 0)
|
|
duration = "Stop is before start!";
|
|
else
|
|
{
|
|
double h = Math.Floor(hrs);
|
|
double m = Math.Floor(60 * (hrs - h));
|
|
duration = String.Format("{0} hours and {1:00} minutes ", h, m);
|
|
duration += (project.Stop == null) ? "(in progress)" : "(finished)";
|
|
}
|
|
// lblProjectInfoDescriptions.Text += "\n" + duration;
|
|
DurationLabel.Text = duration;
|
|
|
|
// Start and stop timestamps. NB: Stop is also updated by timer if project.stop == null
|
|
dtpStartTime.Value = Time.UtcToLocal(project.Start);
|
|
dtpStartDate.Value = Time.UtcToLocal(project.Start);
|
|
|
|
//dtpStopTime.Value = (project.Stop == null) ? Time.Local : (DateTime)project.Stop; // <-- original
|
|
dtpStopTime.Value = (project.Stop == null) ? Time.Local : Time.UtcToLocal((DateTime)project.Stop);
|
|
dtpStopDate.Value = (project.Stop == null) ? Time.Local : Time.UtcToLocal((DateTime)project.Stop);
|
|
|
|
btnStopReset.Text = (project.Stop == null) ? "Set" : "Change";
|
|
|
|
// Show available chambers and select current
|
|
Chamber chamber = new Chamber();
|
|
try
|
|
{
|
|
List<Chamber> chambers = new Chambers().GetAllActive();
|
|
_ChambersContent.CollectionChanged -= chambers_CollectionChanged;
|
|
_ChambersContent.Clear();
|
|
foreach (Chamber c in chambers)
|
|
_ChambersContent.Add(c);
|
|
chambers_CollectionChanged(null, null); // Fire to update
|
|
|
|
for (int i=0;i<_ChambersContent.Count;i++)
|
|
{
|
|
if(_ChambersContent[i].PK == project.Chamber)
|
|
{
|
|
chamber = _ChambersContent[i];
|
|
lboxChambersDetails.SelectedIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
gbChamber.Enabled = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Could not retrieve chambers from database!" + ex.Message, "Projects", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
gbChamber.Enabled = false;
|
|
_ChambersContent.Clear();
|
|
}
|
|
|
|
finally
|
|
{
|
|
// Subscribe again
|
|
_ChambersContent.CollectionChanged += chambers_CollectionChanged;
|
|
}
|
|
|
|
|
|
|
|
// Warnings
|
|
List<string> warnings = new List<string>();
|
|
try
|
|
{
|
|
List<Sensor> sensors = new Sensors().GetActiveByChamber(project.Chamber);
|
|
foreach (Sensor sensor in sensors)
|
|
{
|
|
if (!sensor.ApplyCalibration)
|
|
warnings.Add(String.Format("No calibration applied for sensor '#{0:00} {1}'", sensor.ID + 1, sensor.Description));
|
|
else
|
|
{
|
|
Calibration calibration = new Calibrations().GetLastCreatedBySensorPK(sensor.PK);
|
|
if (calibration == null)
|
|
warnings.Add(String.Format("No calibration for sensor '#{0:00} {1}'", sensor.ID + 1, sensor.Description));
|
|
else if (calibration.Expiry < Time.UTC)
|
|
{
|
|
DateTime dt = calibration.Expiry;
|
|
string msg = string.Format("Calibration for sensor '#{0:00} {1}' expired on {2:0000}/{3:00}/{4:00}", sensor.ID + 1, sensor.Description, dt.Year, dt.Month, dt.Day);
|
|
warnings.Add(msg);
|
|
}
|
|
}
|
|
}
|
|
pboxProjectWarning.Visible = warnings.Count == 0 ? false : true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
warnings.Add("Error: " + ex.Message);
|
|
pboxProjectWarning.Visible = true;
|
|
}
|
|
finally
|
|
{
|
|
lboxProjectNotes.Items.Clear();
|
|
lboxProjectNotes.Items.Add(String.Format("Warnings concerning sensor(s) in chamber {0:00000} {1}", chamber.MIDS, chamber.Description));
|
|
lboxProjectNotes.Items.Add("");
|
|
foreach (String warning in warnings)
|
|
lboxProjectNotes.Items.Add(warning);
|
|
}
|
|
|
|
// Hide conditions. Visible again after first tick of timer
|
|
// lbProjectsSensors.Visible =true; // was false
|
|
// timerConditions.Interval = Math.Max(5000, chamber.Interval * 500); // At least 5 sec or half the chamber interval <-- original
|
|
// timerConditions.Interval = 60000; // interval of 10 sec
|
|
// timerConditions_Tick(null, null);
|
|
}
|
|
|
|
|
|
|
|
private void btnStartReset_Click(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
Project p = SelectedProject;
|
|
|
|
if (p == null)
|
|
return;
|
|
|
|
DateTime time = dtpStartTime.Value;
|
|
DateTime date = dtpStartDate.Value;
|
|
DateTime start = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second);
|
|
p.Start = Time.LocalToUtc(start);
|
|
try
|
|
{
|
|
new Projects().Modify(p);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string error = String.Format("Could not change project.\n{0}", ex.Message);
|
|
MessageBox.Show(error, "Project details", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
dgvProjects_Populate();
|
|
ShowProjectDetails(SelectedProject);
|
|
}
|
|
|
|
private void btnStopReset_Click(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
Project p = SelectedProject;
|
|
|
|
if (p == null)
|
|
return;
|
|
|
|
DateTime time = dtpStopTime.Value;
|
|
DateTime date = dtpStopDate.Value;
|
|
DateTime stop = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second);
|
|
p.Stop = Time.LocalToUtc(stop);
|
|
|
|
try
|
|
{
|
|
new Projects().Modify(p);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string error = String.Format("Could not change project.\n{0}", ex.Message);
|
|
MessageBox.Show(error, "Project details", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
dgvProjects_Populate();
|
|
ShowProjectDetails(SelectedProject);
|
|
}
|
|
|
|
private void btnChamberReset_Click(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
Project p = SelectedProject;
|
|
|
|
if (p == null)
|
|
return;
|
|
|
|
try
|
|
{
|
|
Chamber c = _ChambersContent[lboxChambersDetails.SelectedIndex];
|
|
p.Chamber = c.PK;
|
|
new Projects().Modify(p);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string error = String.Format("Could not change project.\n{0}", ex.Message);
|
|
MessageBox.Show(error, "Project details", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
dgvProjects_Populate();
|
|
ShowProjectDetails(SelectedProject);
|
|
}
|
|
|
|
private void menuView_Click(object sender, EventArgs e)
|
|
{
|
|
ShowProjects(ProjectStatus.InProgress);
|
|
}
|
|
|
|
private void menuViewFinished_Click(object sender, EventArgs e)
|
|
{
|
|
ShowProjects(ProjectStatus.Finished);
|
|
}
|
|
|
|
private void menuViewAll_Click(object sender, EventArgs e)
|
|
{
|
|
ShowProjects(ProjectStatus.None);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void menuNewProject_Click(object sender, EventArgs e)
|
|
{
|
|
ShowPanelNewProject();
|
|
}
|
|
|
|
private void timerProjectDetails_Tick(object sender, EventArgs e)
|
|
{
|
|
Console.WriteLine("REFRESH");
|
|
|
|
if ( _ProjectsContent != null)
|
|
{
|
|
try
|
|
{
|
|
// Update stop date and time
|
|
dtpStopTime.Value = (SelectedProject.Stop == null) ? Time.Local : Time.UtcToLocal((DateTime)SelectedProject.Stop);
|
|
dtpStopDate.Value = (SelectedProject.Stop == null) ? Time.Local : Time.UtcToLocal((DateTime)SelectedProject.Stop);
|
|
btnStopReset.Text = (SelectedProject.Stop == null) ? "Set" : "Change";
|
|
|
|
ShowProjectDetails(SelectedProject);
|
|
|
|
gbProjectDetails.Visible = false;
|
|
}
|
|
catch { }
|
|
}
|
|
}
|
|
|
|
|
|
private void btnOpenFolderChamber_Click(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
try
|
|
{
|
|
Chamber chamber = _ChambersContent[lboxChambersDetails.SelectedIndex];
|
|
if (Directory.Exists(chamber.PathToFolderOnServer))
|
|
System.Diagnostics.Process.Start(chamber.PathToFolderOnServer);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string error = String.Format("Could not open folder.\n{0}", ex.Message);
|
|
MessageBox.Show(error, "Open folder", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
}
|
|
|
|
private void btnOpenFolderProject_Click(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
|
|
try
|
|
{
|
|
if(SelectedProject.ProjectDescription == "Maintenance and calibration")
|
|
{
|
|
if(SelectedProject.SubProjectDescription == "Service")
|
|
{
|
|
string devID = SelectedProject.ProjectID.ToString();
|
|
devID = devID.Substring(2);
|
|
System.Diagnostics.Process.Start(String.Format("Z:\\inventory\\{0:00000}\\service", Int32.Parse(devID)));
|
|
}
|
|
else
|
|
{
|
|
string devID = SelectedProject.ProjectID.ToString();
|
|
devID = devID.Substring(2);
|
|
System.Diagnostics.Process.Start(String.Format("Z:\\inventory\\{0:00000}\\calibration", Int32.Parse(devID)));
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if (Directory.Exists(SelectedProject.PathToFolderOnServer))
|
|
System.Diagnostics.Process.Start(SelectedProject.PathToFolderOnServer);
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string error = String.Format("Could not open folder.\n{0}", ex.Message);
|
|
MessageBox.Show(error, "Open folder", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
private void gbProjectDetails_VisibleChanged(object sender, EventArgs e)
|
|
{
|
|
if (gbProjectDetails.Visible)
|
|
{
|
|
timerProjectDetails.Start();
|
|
//timerConditions.Start();
|
|
}
|
|
else
|
|
{
|
|
timerProjectDetails.Stop();
|
|
//timerConditions.Stop();
|
|
}
|
|
}
|
|
|
|
|
|
private void timerUtcClock_Tick(object sender, EventArgs e)
|
|
{
|
|
// Obtain UTC time
|
|
DateTime dt = Time.UTC;
|
|
// Obtain Local time
|
|
DateTime dt_local = Time.UTC.ToLocalTime();
|
|
lblUTCTime.Text = String.Format("Current UTC time is {0:00}:{1:00}, local time is {2:00}:{3:00}.", dt.Hour, dt.Minute, dt_local.Hour, dt_local.Minute);
|
|
}
|
|
|
|
public void updateChamberConditions(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
private void pboxProjectWarning_MouseEnter(object sender, EventArgs e)
|
|
{
|
|
pnlNotes.Visible = true;
|
|
}
|
|
|
|
private void pboxProjectWarning_MouseLeave(object sender, EventArgs e)
|
|
{
|
|
pnlNotes.Visible = false;
|
|
}
|
|
|
|
public void btnExport_Click(object sender, EventArgs e)
|
|
{
|
|
Project project = SelectedProject;
|
|
|
|
if (project == null)
|
|
return;
|
|
|
|
|
|
DateTime time = dtpStopTime.Value;
|
|
DateTime date = dtpStopDate.Value;
|
|
|
|
|
|
DateTime stop = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second);
|
|
|
|
|
|
project.Stop = Time.LocalToUtc(stop);
|
|
|
|
try
|
|
{
|
|
new Projects().Modify(project);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string error = String.Format("Could not change project.\n{0}", ex.Message);
|
|
MessageBox.Show(error, "Project details", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
|
|
dgvProjects_Populate();
|
|
ShowProjectDetails(SelectedProject);
|
|
|
|
gbProjectDetails.Visible = false; // Stops timers
|
|
|
|
pnlExport.BringToFront();
|
|
|
|
gbLinkChambers.Visible = (Control.ModifierKeys == Keys.Shift) ? true : false;
|
|
|
|
Chamber chamber = new Chamber();
|
|
try
|
|
{
|
|
chamber = new Chambers().GetByPK(project.Chamber);
|
|
if (chamber == null)
|
|
throw new Exception("new Chambers().GetByPK(project.PK) returned null");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Could not retrieve chamber from database!\n\nError: " + ex.Message, "Export project", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
if(project.ProjectDescription == "Maintenance and calibration")
|
|
{
|
|
lblExportProject.Text = String.Format("I{0:000000} sub {1:00} step {2:00} in chamber {3:00000}", project.ProjectID, project.SubProject, project.Step, chamber.MIDS);
|
|
}
|
|
else
|
|
{
|
|
lblExportProject.Text = String.Format("P{0:000000} sub {1:00} step {2:00} in chamber {3:00000}", project.ProjectID, project.SubProject, project.Step, chamber.MIDS);
|
|
}
|
|
|
|
|
|
// Initialize export
|
|
Export.Create(project, chamber);
|
|
|
|
// Populate dgvLinkChambers (update tracking list _ChambersContent)
|
|
// Do not include the current chamber.
|
|
int indexOfCurrentChamber = 0;
|
|
List<Chamber> chambers;
|
|
try
|
|
{
|
|
chambers = new Chambers().GetAllActive();
|
|
_ChambersContent.CollectionChanged -= chambers_CollectionChanged;
|
|
_ChambersContent.Clear();
|
|
for(int i=0;i<chambers.Count;i++)
|
|
{
|
|
if (chambers[i].PK == chamber.PK)
|
|
indexOfCurrentChamber = i;
|
|
else
|
|
_ChambersContent.Add(chambers[i]);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Could not retrieve chambers from database!\n\nError: " + ex.Message, "Export project", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
_ChambersContent.Clear();
|
|
return;
|
|
}
|
|
finally
|
|
{
|
|
// Subscribe again
|
|
_ChambersContent.CollectionChanged += chambers_CollectionChanged;
|
|
chambers_CollectionChanged(null, null); // Fire to update dgv
|
|
}
|
|
|
|
// List sensors of current chamber
|
|
dgvLinkChambers_SelectionChanged();
|
|
|
|
|
|
|
|
if (MIDSinterface.RowColor(chamber.MIDS) == Color.FromArgb(208, 195, 249) || MIDSinterface.RowColor(chamber.MIDS) == Color.FromArgb(191, 226, 248))
|
|
{ // HAST or Climate chamber :D
|
|
Console.WriteLine("HAST/climate chamber");
|
|
// preselect two Pt100 sensors and RH sensor(s)
|
|
for (int i = 0; i < _SensorsContent.Count; i++)
|
|
{
|
|
if (_SensorsContent[i].Type == SensorType.Pt100 || _SensorsContent[i].Type == SensorType.PressurecookerRH || _SensorsContent[i].Type == SensorType.PsychrometerRH)
|
|
{
|
|
_SensorsContentSelected[i] = true;
|
|
}
|
|
else
|
|
{
|
|
_SensorsContentSelected[i] = false;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{ // other type of chamber
|
|
Console.WriteLine("NO HAST/climate chamber");
|
|
// Only preselect two Pt100 sensors
|
|
for (int i = 0; i < _SensorsContent.Count; i++)
|
|
{
|
|
if (_SensorsContent[i].Type == SensorType.Pt100)
|
|
{
|
|
_SensorsContentSelected[i] = true;
|
|
}
|
|
else
|
|
{
|
|
_SensorsContentSelected[i] = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// check alle voltage channels. Alle kanalen met bias worden automatisch geselecteerd
|
|
for (int i = 0; i < _SensorsContent.Count; i++)
|
|
{
|
|
if (_SensorsContent[i].Type == SensorType.Voltage)
|
|
{
|
|
//SqlConnection connection = new SqlConnection("Data Source=MEEU010LAB00003\\FEANOR; Initial Catalog = FEANOR; Persist Security Info=True; User " +
|
|
//"ID = sa; Password=resam@123resam; connection timeout=15; TrustServerCertificate=True");
|
|
SqlConnection connection = new SqlConnection("Data Source=tcp:10.126.21.47\\FEANOR,1434; Initial Catalog=FEANOR; User ID=sa; Password=resam@123resam; timeout=15; Persist Security Info=True; TrustServerCertificate=True");
|
|
|
|
try
|
|
{
|
|
using (connection)
|
|
{
|
|
string query = " ";
|
|
if(chamber.Humidity == true)
|
|
{
|
|
query = "SELECT TOP 1 Value FROM Results WHERE SensorPK = @SensorPK AND TimeStamp BETWEEN DATEADD(HOUR, -3, @StopTime) AND DATEADD(HOUR, -2, @StopTime) ORDER BY TimeStamp DESC";
|
|
}
|
|
else
|
|
{
|
|
query = "SELECT TOP 1 Value FROM ResultsOudeHal WHERE SensorPK = @SensorPK AND TimeStamp BETWEEN DATEADD(HOUR, -3, @StopTime) AND DATEADD(HOUR, -2, @StopTime) ORDER BY TimeStamp DESC";
|
|
}
|
|
|
|
SqlCommand command = new SqlCommand(query, connection);
|
|
command.Parameters.AddWithValue("@SensorPK", _SensorsContent[i].PK);
|
|
command.Parameters.AddWithValue("@StopTime", stop);
|
|
|
|
connection.Open();
|
|
|
|
object result = command.ExecuteScalar();
|
|
|
|
float resultvalue;
|
|
|
|
if (result != null)
|
|
{
|
|
resultvalue = Convert.ToSingle(result);
|
|
}
|
|
else
|
|
{
|
|
resultvalue = 0.0f;
|
|
}
|
|
|
|
//Console.WriteLine(_SensorsContent[i].PK.ToString() + " " + resultvalue.ToString());
|
|
|
|
if (resultvalue > 0.1 || resultvalue < -0.1)
|
|
{
|
|
_SensorsContentSelected[i] = true;
|
|
}
|
|
else
|
|
{
|
|
_SensorsContentSelected[i] = false;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
dgvSensors_SelectionChanged();
|
|
|
|
string devID = project.ProjectID.ToString();
|
|
devID = devID.Substring(2);
|
|
Console.WriteLine("DEV ID: ");
|
|
Console.WriteLine(devID);
|
|
|
|
|
|
|
|
// File name to txtb
|
|
if(project.ProjectDescription == "Maintenance and calibration") // INV project
|
|
{
|
|
if (project.SubProjectDescription == "Calibration" || project.SubProjectDescription == "calibration")
|
|
{
|
|
Console.WriteLine("Calibration");
|
|
Console.WriteLine(String.Format("Z:\\inventory\\{0:00000}\\calibration\\I{1}.{2} calibration", Int32.Parse(devID), project.ProjectID, project.SubProject));
|
|
txtbExportPath.Text = String.Format("Z:\\inventory\\{0:00000}\\calibration\\I{1}.{2} calibration", Int32.Parse(devID), project.ProjectID, project.SubProject);
|
|
txtbFilename.Text = String.Format("I{0}.{1} step {2} calibration.csv",project.ProjectID, project.SubProject, project.Step);
|
|
}
|
|
else if (project.SubProjectDescription == "Service" || project.SubProjectDescription == "service")
|
|
{
|
|
Console.WriteLine("Service");
|
|
Console.WriteLine(String.Format("Z:\\inventory\\{0:00000}\\service\\I{1}.{2} service", Int32.Parse(devID), project.ProjectID, project.SubProject));
|
|
txtbExportPath.Text = String.Format("Z:\\inventory\\{0:00000}\\service\\I{1}.{2} service", Int32.Parse(devID), project.ProjectID, project.SubProject);
|
|
txtbFilename.Text = String.Format("I{0}.{1} step {2} service.csv", project.ProjectID, project.SubProject, project.Step);
|
|
}
|
|
}
|
|
else // p project
|
|
{
|
|
txtbExportPath.Text = Export.Project.PathToFolderOnServer;
|
|
txtbFilename.Text = Export.DefaultExportFileName;
|
|
}
|
|
}
|
|
|
|
|
|
private void dgvLinkChambers_SelectionChanged()
|
|
{
|
|
// Store selected list
|
|
List<Sensor> selectedSensors = new List<Sensor>();
|
|
foreach (DataGridViewRow r in dgvSensors.SelectedRows)
|
|
selectedSensors.Add(_SensorsContent[r.Index]);
|
|
|
|
// Get linked chambers. Always include current chamber (from Export)
|
|
// Add sensors of linked chambers
|
|
List<Chamber> linked = new List<Chamber>();
|
|
linked.Add(Export.Chamber);
|
|
for (int i = 0; i < _ChambersContent.Count; i++)
|
|
{
|
|
if (_ChambersContentSelected[i])
|
|
{
|
|
linked.Add(_ChambersContent[i]);
|
|
dgvLinkChambers.Rows[i].Selected = true;
|
|
}
|
|
else
|
|
dgvLinkChambers.Rows[i].Selected = false;
|
|
}
|
|
|
|
// Create list of linked sensors
|
|
List<Sensor> linkedSensors = new List<Sensor>();
|
|
try
|
|
{
|
|
foreach (Chamber c in linked)
|
|
{
|
|
List<Sensor> sensors = new Sensors().GetActiveByChamber(c.PK);
|
|
foreach (Sensor s in sensors)
|
|
{
|
|
if (linked.Count != 1)
|
|
s.ListDescription = string.Format("{0:00000}.{1:00} {2} ({3})", c.MIDS, s.ID, s.Description, s.Units);
|
|
else
|
|
s.ListDescription = string.Format("{0:00} {1} ({2})", s.ID, s.Description, s.Units);
|
|
linkedSensors.Add(s);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Could not find linked sensors!\n\n" + ex.Message, "Export", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
// Populate _dgvSensorsContent
|
|
try
|
|
{
|
|
_SensorsContent.CollectionChanged -= sensors_CollectionChanged;
|
|
_SensorsContent.Clear();
|
|
foreach (Sensor s in linkedSensors)
|
|
_SensorsContent.Add(s);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_SensorsContent.Clear();
|
|
MessageBox.Show("Could not find sensors!\n\n" + ex.Message, "Export", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
finally
|
|
{
|
|
// Refresh content
|
|
_SensorsContent.CollectionChanged += sensors_CollectionChanged;
|
|
sensors_CollectionChanged(null, null);
|
|
}
|
|
|
|
// Reselect sensors
|
|
List<int> PKs = new List<int>();
|
|
foreach (Sensor s in selectedSensors)
|
|
PKs.Add(s.PK);
|
|
|
|
for (int i = 0; i < _SensorsContent.Count; i++)
|
|
{
|
|
if( PKs.Contains(_SensorsContent[i].PK))
|
|
_SensorsContentSelected[i] = true;
|
|
else
|
|
_SensorsContentSelected[i] = false;
|
|
}
|
|
|
|
dgvSensors_SelectionChanged();
|
|
}
|
|
|
|
|
|
private void dgvSensors_SelectionChanged()
|
|
{
|
|
// Selection acc. _SensorsContentSelected
|
|
for (int i = 0; i < _SensorsContent.Count; i++)
|
|
{
|
|
dgvSensors.Rows[i].Selected = _SensorsContentSelected[i] ? true : false;
|
|
}
|
|
}
|
|
|
|
|
|
// EXPORT AND END TEST!
|
|
private void btnDoExport_Click(object sender, EventArgs e) // EXPORT BUTTON ( indexindex )
|
|
{
|
|
#warning Add the sensors in the primary chamber first.
|
|
// Add the sensors in the primary chamber first. The first sensor in the list is handled as primary in the export.
|
|
|
|
List<Sensor> sensors = new List<Sensor>(); //original
|
|
|
|
// Obtain all selected sensors to export (top to bottom)
|
|
for (int i = 0; i < _SensorsContent.Count; i++)
|
|
{
|
|
if((_SensorsContentSelected[i] ? true : false) == true)
|
|
{
|
|
sensors.Add(_SensorsContent[i]);
|
|
}
|
|
}
|
|
|
|
if (sensors.Count == 0)
|
|
{
|
|
MessageBox.Show("No sensors selected!", "Export", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
return;
|
|
}
|
|
|
|
Export.Sensors = sensors;
|
|
|
|
// Construct file and check
|
|
Export.File = txtbExportPath.Text + "\\" + txtbFilename.Text;
|
|
|
|
if (!Export.File.ToLower().EndsWith(".csv"))
|
|
Export.File = Export.File + ".csv";
|
|
|
|
if (!Directory.Exists(txtbExportPath.Text))
|
|
{
|
|
MessageBox.Show("Folder for export not found!", "Export", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
if (File.Exists(Export.File))
|
|
{
|
|
DialogResult dr = MessageBox.Show("File already exists!\n\nDo you want to overwrite?", "Export", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
|
|
if (dr != DialogResult.Yes)
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
this.Cursor = Cursors.WaitCursor;
|
|
Export.ToFile();
|
|
MessageBox.Show("Export done!");
|
|
|
|
if (cbOpenMeta.Checked == true)
|
|
{
|
|
try // if .csv file is created succesfully, try to open it in META
|
|
{
|
|
string exportFile = txtbExportPath.Text + "\\" + txtbFilename.Text; // export file path + file name
|
|
string command = PathToAnalysisTool; // path of META
|
|
string file = String.Format("\"{0}\"", exportFile);
|
|
|
|
System.Diagnostics.Process.Start(command, file); // start META and enter corresponding .csv file
|
|
|
|
|
|
}
|
|
catch (Exception eTDA)
|
|
{
|
|
MessageBox.Show(String.Format("Could not start analysis!\n\n{0}", eTDA.Message), "Exporting");
|
|
}
|
|
}
|
|
|
|
ShowProjects(ProjectStatus.InProgress); // show projects which are in progress
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
MessageBox.Show("Export to file failed!\n\n" +ex.Message, "Export", MessageBoxButtons.OK, MessageBoxIcon.Error); // <-- deze error komt vaak
|
|
return;
|
|
}
|
|
}
|
|
|
|
private void dgvLinkChambers_CellClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
int i = e.RowIndex;
|
|
if (i < 0)
|
|
return;
|
|
|
|
_ChambersContentSelected[i] = !_ChambersContentSelected[i];
|
|
dgvLinkChambers_SelectionChanged();
|
|
}
|
|
|
|
private void dgvSensors_CellClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
int i = e.RowIndex;
|
|
if (i < 0)
|
|
return;
|
|
|
|
_SensorsContentSelected[i] = !_SensorsContentSelected[i];
|
|
dgvSensors_SelectionChanged();
|
|
}
|
|
|
|
private void btnSelectAllSensors_Click(object sender, EventArgs e)
|
|
{
|
|
for (int i = 0; i < _SensorsContentSelected.Length; i++)
|
|
_SensorsContentSelected[i] = true;
|
|
dgvSensors_SelectionChanged();
|
|
}
|
|
|
|
private void btnDeSelectAllSensors_Click(object sender, EventArgs e)
|
|
{
|
|
for (int i = 0; i < _SensorsContentSelected.Length; i++)
|
|
_SensorsContentSelected[i] = false;
|
|
dgvSensors_SelectionChanged();
|
|
}
|
|
|
|
private void btnExportCancel_Click(object sender, EventArgs e)
|
|
{
|
|
Project project = SelectedProject;
|
|
|
|
// reset stop time of project
|
|
project.Stop = null;
|
|
|
|
try
|
|
{
|
|
new Projects().Modify(project);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string error = String.Format("Could not change project.\n{0}", ex.Message);
|
|
MessageBox.Show(error, "Project details", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
ShowProjects(ProjectStatus.InProgress);
|
|
for(int i=0; i<_ProjectsContent.Count;i++)
|
|
{
|
|
if( _ProjectsContent[i].PK == project.PK)
|
|
{
|
|
dgvProjects.Rows[i].Selected = true;
|
|
dgvProjects_MouseClick(null, null);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void dgvProjects_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
e.Handled = true;
|
|
if (e.KeyCode == Keys.Delete)
|
|
{
|
|
MessageBox.Show("Delete a project");
|
|
}
|
|
}
|
|
|
|
private void btnExportPath_Click(object sender, EventArgs e)
|
|
{
|
|
string folder = String.Format("Z:\\projects\\{0}", DateTime.Now.Year);
|
|
if (Directory.Exists(folder))
|
|
FolderBrowserDialog.SelectedPath = folder;
|
|
|
|
DialogResult dr = FolderBrowserDialog.ShowDialog();
|
|
if (dr == DialogResult.OK)
|
|
txtbExportPath.Text = FolderBrowserDialog.SelectedPath;
|
|
}
|
|
|
|
//when inputting project number search for subproject list
|
|
private void txtbNewProjectNumber_TextChanged(object sender, EventArgs e)
|
|
{
|
|
// retreive data inputted by user
|
|
string projectnumb = txtbNewProjectNumber.Text;
|
|
|
|
if (cboxInvProject.Checked == true) // INV project
|
|
{
|
|
Console.WriteLine("Inventory Project (I)");
|
|
|
|
if (projectnumb.Length == 6)
|
|
{
|
|
try
|
|
{
|
|
|
|
txtbNewSubprojectNumber.Focus();
|
|
|
|
List<String> SubProjectList = MIDSinterface.GetINVSubProjectList(int.Parse(projectnumb));
|
|
|
|
if (SubProjectList.Count == 0)
|
|
return;
|
|
|
|
lbNewSubProjectSelectList.Items.Clear();
|
|
Int32 i = 1;
|
|
foreach (String s in SubProjectList)
|
|
{
|
|
String item = String.Format("{0:00} {1}", i, s);
|
|
lbNewSubProjectSelectList.Items.Add(item);
|
|
i++;
|
|
}
|
|
gbNewSubProjectSelectList.Text = "Subprojects in this project";
|
|
gbNewSubProjectSelectList.Visible = true;
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("Project (P)");
|
|
|
|
if (projectnumb.Length == 6)
|
|
{
|
|
try
|
|
{
|
|
|
|
txtbNewSubprojectNumber.Focus();
|
|
|
|
List<String> SubProjectList = MIDSinterface.GetSubProjectList(int.Parse(projectnumb));
|
|
|
|
if (SubProjectList.Count == 0)
|
|
return;
|
|
|
|
lbNewSubProjectSelectList.Items.Clear();
|
|
Int32 i = 1;
|
|
foreach (String s in SubProjectList)
|
|
{
|
|
String item = String.Format("{0:00} {1}", i, s);
|
|
lbNewSubProjectSelectList.Items.Add(item);
|
|
i++;
|
|
}
|
|
gbNewSubProjectSelectList.Text = "Subprojects in this project";
|
|
gbNewSubProjectSelectList.Visible = true;
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// when inputting subproject number search for step list
|
|
private void txtbNewSubprojectNumber_TextChanged(object sender, EventArgs e)
|
|
{
|
|
// retreive data inputted by user
|
|
string projectnumb = txtbNewProjectNumber.Text;
|
|
string subprojectnumb = txtbNewSubprojectNumber.Text;
|
|
|
|
if(subprojectnumb.Length > 1)
|
|
txtbNewStepNumber.Focus();
|
|
|
|
if (cboxInvProject.Checked == true) // INV project
|
|
{
|
|
Console.WriteLine("Inventory Project (I)");
|
|
if (projectnumb.Length == 6 && subprojectnumb.Length > 0)
|
|
{
|
|
try
|
|
{
|
|
List<String> StepList = MIDSinterface.GetINVStepList(int.Parse(projectnumb), int.Parse(subprojectnumb));
|
|
|
|
try
|
|
{
|
|
lbNewStepSelectList.Items.Clear();
|
|
Int32 i = 1;
|
|
|
|
if (StepList.Count == 0)
|
|
return;
|
|
|
|
foreach (String step in StepList)
|
|
{
|
|
String item = String.Format("{0:00} {1}", i, step);
|
|
lbNewStepSelectList.Items.Add(item);
|
|
i++;
|
|
}
|
|
gbNewStepSelectList.Text = "Steps in this subproject";
|
|
gbNewSubProjectSelectList.Visible = false;
|
|
gbNewStepSelectList.Visible = true;
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("normal project (P)");
|
|
if (projectnumb.Length == 6 && subprojectnumb.Length > 0)
|
|
{
|
|
try
|
|
{
|
|
List<String> StepList = MIDSinterface.GetStepList(int.Parse(projectnumb), int.Parse(subprojectnumb));
|
|
|
|
try
|
|
{
|
|
lbNewStepSelectList.Items.Clear();
|
|
Int32 i = 1;
|
|
|
|
if (StepList.Count == 0)
|
|
return;
|
|
|
|
foreach (String step in StepList)
|
|
{
|
|
String item = String.Format("{0:00} {1}", i, step);
|
|
lbNewStepSelectList.Items.Add(item);
|
|
i++;
|
|
}
|
|
gbNewStepSelectList.Text = "Steps in this subproject";
|
|
gbNewSubProjectSelectList.Visible = false;
|
|
gbNewStepSelectList.Visible = true;
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
private void btnOpenMIDS_Click(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
|
|
if (SelectedProject.ProjectDescription == "Maintenance and calibration") // INV project
|
|
{
|
|
try
|
|
{
|
|
Project project = SelectedProject;
|
|
String target = "https://mids.itiz-me-eu.local/legacy/index.php?section=projects&subsection=subprojects&action=view&action=view&id=";
|
|
Int32 MIDStableID = MIDSinterface.SubINVProjectMIDSTableID(Convert.ToInt32(project.ProjectID), Convert.ToInt32(project.SubProject));
|
|
target += MIDStableID.ToString();
|
|
Console.WriteLine(target);
|
|
System.Diagnostics.Process.Start(target);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
Project project = SelectedProject;
|
|
String target = "https://mids.itiz-me-eu.local/legacy/index.php?section=projects&subsection=subprojects&action=view&action=view&id=";
|
|
Int32 MIDStableID = MIDSinterface.SubProjectMIDSTableID(Convert.ToInt32(project.ProjectID), Convert.ToInt32(project.SubProject));
|
|
target += MIDStableID.ToString();
|
|
Console.WriteLine(target);
|
|
System.Diagnostics.Process.Start(target);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
private void lbNewSubProjectSelectList_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
// Get row and return subproject in field NewSubProjectNumber
|
|
// Make pnl invisible
|
|
Int32 Sub = lbNewSubProjectSelectList.SelectedIndex;
|
|
txtbNewSubprojectNumber.Text = String.Format("{0:00}", Sub + 1);
|
|
gbNewSubProjectSelectList.Visible = false;
|
|
gbNewStepSelectList.Visible = true;
|
|
}
|
|
|
|
private void lbNewStepSelectList_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
// Get row and return subproject in field NewSubProjectNumber
|
|
// Make pnl invisible
|
|
Int32 Step = lbNewStepSelectList.SelectedIndex;
|
|
txtbNewStepNumber.Text = String.Format("{0:00}", Step + 1);
|
|
gbNewStepSelectList.Visible = false;
|
|
|
|
btnNewProjectFindMIDS_Click(null, null);
|
|
}
|
|
|
|
|
|
private void btnFindProject_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (txtbFindProjectNumber.Text.ToLower().StartsWith("p"))
|
|
txtbFindProjectNumber.Text = txtbFindProjectNumber.Text.Substring(1);
|
|
|
|
Int32 ProjectNumber = 0;
|
|
Int32 SubProjectNumber = 0;
|
|
Int32 StepNumber = 0;
|
|
Int32 Chamber = 0;
|
|
|
|
Boolean status = false;
|
|
|
|
if (Int32.TryParse(txtbFindProjectNumber.Text, out ProjectNumber))
|
|
status = true;
|
|
if (Int32.TryParse(txtbFindProjectSub.Text, out SubProjectNumber))
|
|
status = true;
|
|
if (Int32.TryParse(txtbFindProjectStep.Text, out StepNumber))
|
|
status = true;
|
|
if (txtbFindCustomer.Text.Length > 0)
|
|
status = true;
|
|
if (Int32.TryParse(txtbFindChamber.Text, out Chamber))
|
|
status = true;
|
|
if (txtbFindDescr.Text.Length > 0)
|
|
status = true;
|
|
|
|
if (!status)
|
|
{
|
|
MessageBox.Show("Inputformat incorrect!", "Find project", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
List<Project> projectList = new Projects().GetAll();
|
|
List<int> indexToRemove = new List<int>();
|
|
|
|
// If ProjectNumber != 0 filter out non-matching
|
|
if (ProjectNumber > 0)
|
|
{
|
|
for (int i = 0; i < projectList.Count; i++)
|
|
{
|
|
if (!projectList[i].ProjectID.ToString().EndsWith(ProjectNumber.ToString()))
|
|
indexToRemove.Add(i);
|
|
}
|
|
}
|
|
|
|
// If SubProjectNumber != 0 filter out non-matching
|
|
if (SubProjectNumber > 0)
|
|
{
|
|
for (int i = 0; i < projectList.Count; i++)
|
|
{
|
|
if (!projectList[i].SubProject.ToString().EndsWith(SubProjectNumber.ToString()))
|
|
indexToRemove.Add(i);
|
|
}
|
|
}
|
|
|
|
// If StepNumber != 0 filter out non-matching
|
|
if (StepNumber > 0)
|
|
{
|
|
for (int i = 0; i < projectList.Count; i++)
|
|
{
|
|
if (!projectList[i].Step.ToString().EndsWith(StepNumber.ToString()))
|
|
indexToRemove.Add(i);
|
|
}
|
|
}
|
|
|
|
// If Customer is not empty filter out non-matching
|
|
if (txtbFindCustomer.Text.Length > 0)
|
|
{
|
|
String needle = txtbFindCustomer.Text.ToLower().Trim();
|
|
bool keep;
|
|
|
|
for (int i = 0; i < projectList.Count; i++)
|
|
{
|
|
keep = false;
|
|
|
|
if (projectList[i].Customer.ToLower().Contains(needle))
|
|
keep = true;
|
|
|
|
|
|
if (!keep)
|
|
indexToRemove.Add(i);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// If description is not empty filter out non-matching
|
|
if (txtbFindDescr.Text.Length > 0)
|
|
{
|
|
String needle = txtbFindDescr.Text.ToLower().Trim();
|
|
bool keep;
|
|
|
|
for (int i = 0; i < projectList.Count; i++)
|
|
{
|
|
keep = false;
|
|
|
|
if (projectList[i].ProjectDescription.ToLower().Contains(needle))
|
|
keep = true;
|
|
|
|
if (projectList[i].SubProjectDescription.ToLower().Contains(needle))
|
|
keep = true;
|
|
|
|
if (projectList[i].StepDescription.ToLower().Contains(needle))
|
|
keep = true;
|
|
|
|
if (!keep)
|
|
indexToRemove.Add(i);
|
|
}
|
|
}
|
|
|
|
|
|
// If Chamber != 0 filter out non-matching
|
|
if (Chamber > 0)
|
|
{
|
|
// Get chamber_PK by given MIDS ID
|
|
int Chamber_PK = 0;
|
|
List<Chamber> chamberList = new Chambers().GetAll();
|
|
|
|
foreach (Chamber cc in chamberList)
|
|
if (cc.MIDS == Chamber)
|
|
Chamber_PK = cc.PK; // was c.Chamber_PK;
|
|
|
|
|
|
if (Chamber_PK > 0)
|
|
{
|
|
for (int i = 0; i < projectList.Count; i++)
|
|
{
|
|
if (projectList[i].Chamber != Chamber_PK)
|
|
indexToRemove.Add(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (_ProjectsContent == null)
|
|
{
|
|
gbProjectList.Text = "Projects (0)";
|
|
dgvProjects.Rows.Clear();
|
|
return;
|
|
}
|
|
if (_ProjectsContent.Count == 0)
|
|
{
|
|
gbProjectList.Text = "Projects (0)";
|
|
dgvProjects.Rows.Clear();
|
|
return;
|
|
}
|
|
|
|
// Remove enough rows or add missing ones
|
|
while (dgvProjects.Rows.Count > _ProjectsContent.Count)
|
|
dgvProjects.Rows.RemoveAt(0);
|
|
if (dgvProjects.Rows.Count < _ProjectsContent.Count)
|
|
dgvProjects.Rows.Add(_ProjectsContent.Count - dgvProjects.Rows.Count);
|
|
|
|
|
|
List<Project> projectListItemList = new List<Project>();
|
|
|
|
dgvProjects.Rows.Clear();
|
|
|
|
for (int i = 0; i < projectList.Count; i++) // projectList --> ALL projects
|
|
{
|
|
if (!indexToRemove.Contains(i))
|
|
{
|
|
projectListItemList.Add(projectList[i]);
|
|
Console.WriteLine(projectList[i].ProjectID);
|
|
}
|
|
}
|
|
|
|
_ProjectsContent.CollectionChanged -= projects_CollectionChanged; // Unsubscribe to prevent reoccuring firing
|
|
_ProjectsContent.Clear();
|
|
foreach (Project p in projectListItemList)
|
|
_ProjectsContent.Add(p);
|
|
|
|
// Subscribe again and fire
|
|
_ProjectsContent.CollectionChanged += projects_CollectionChanged;
|
|
projects_CollectionChanged(null, null);
|
|
|
|
|
|
dgvProjects.ClearSelection();
|
|
|
|
pnlViewProjects.Visible = true;
|
|
gbProjectList.Text = String.Format("Projects found ({0})", projectListItemList.Count);
|
|
pnlFindProject.Visible = false;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string error = String.Format("Could not find project.\n\n{0}", ex.Message);
|
|
MessageBox.Show(error, "Find project", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
finally
|
|
{
|
|
txtbFindCustomer.Clear();
|
|
txtbFindChamber.Clear();
|
|
txtbFindDescr.Clear();
|
|
}
|
|
|
|
}
|
|
|
|
private void btnStopReReset_Click(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
Project p = SelectedProject;
|
|
|
|
p.Stop = null;
|
|
|
|
try
|
|
{
|
|
new Projects().Modify(p);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string error = String.Format("Could not change project.\n{0}", ex.Message);
|
|
MessageBox.Show(error, "Project details", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
dgvProjects_Populate();
|
|
ShowProjectDetails(SelectedProject);
|
|
ShowProjects(ProjectStatus.InProgress);
|
|
}
|
|
|
|
private void btnCancelNewProject_Click(object sender, EventArgs e)
|
|
{
|
|
ShowProjects(ProjectStatus.InProgress);
|
|
}
|
|
|
|
private void sensorConditions_DoWork(object sender, DoWorkEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void btnNodeStatus_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
|
|
Project project = SelectedProject;
|
|
Chamber chamber;
|
|
|
|
int ChamberPK = project.Chamber;
|
|
|
|
chamber = new Chambers().GetByPK(ChamberPK);
|
|
|
|
String UrlString = "http://" + chamber.Network + ":8080/status";
|
|
|
|
// voor niet CMS2 PC's kan de NodeStatus niet direct opgehaald worden (omweg door de Nodestatus html op te slaan op Z:)
|
|
if (CMS2PC == false)
|
|
{
|
|
try
|
|
{
|
|
string fileName = $"Node_{chamber.MIDS}_status.html";
|
|
string filePath = Path.Combine("Z:\\projects\\2020\\P201339\\sub1\\4. Software\\8. Nodestatus\\", fileName);
|
|
|
|
if (File.Exists(filePath))
|
|
{
|
|
Process.Start(new ProcessStartInfo
|
|
{
|
|
FileName = filePath,
|
|
UseShellExecute = true
|
|
});
|
|
}
|
|
}
|
|
catch { }
|
|
return;
|
|
}
|
|
|
|
System.Diagnostics.Process.Start(UrlString);
|
|
|
|
try
|
|
{
|
|
using (WebClient client = new WebClient())
|
|
{
|
|
string dta = client.DownloadString(UrlString); // send status HTTP request to cms node
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
Console.WriteLine("Status request error!");
|
|
System.Windows.Forms.MessageBox.Show("No response from CMS-2 node");
|
|
}
|
|
|
|
}
|
|
|
|
// EXPORT WITHOUT ENDING TEST!!!
|
|
private void btnExpNoDate_Click(object sender, EventArgs e)
|
|
{
|
|
#warning Add the sensors in the primary chamber first.
|
|
// Add the sensors in the primary chamber first. The first sensor in the list is handled as primary in the export.
|
|
|
|
List<Sensor> sensors = new List<Sensor>(); //original
|
|
|
|
// Obtain all selected sensors to export (top to bottom)
|
|
for (int i = 0; i < _SensorsContent.Count; i++)
|
|
{
|
|
if ((_SensorsContentSelected[i] ? true : false) == true)
|
|
{
|
|
sensors.Add(_SensorsContent[i]);
|
|
}
|
|
}
|
|
|
|
if (sensors.Count == 0)
|
|
{
|
|
MessageBox.Show("No sensors selected!", "Export", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
return;
|
|
}
|
|
|
|
Export.Sensors = sensors;
|
|
|
|
// Construct file and check
|
|
Export.File = txtbExportPath.Text + "\\" + txtbFilename.Text;
|
|
|
|
if (!Export.File.ToLower().EndsWith(".csv"))
|
|
Export.File = Export.File + ".csv";
|
|
|
|
if (!Directory.Exists(txtbExportPath.Text))
|
|
{
|
|
MessageBox.Show("Folder for export not found!", "Export", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
if (File.Exists(Export.File))
|
|
{
|
|
DialogResult dr = MessageBox.Show("File already exists!\n\nDo you want to overwrite?", "Export", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
|
|
if (dr != DialogResult.Yes)
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
this.Cursor = Cursors.WaitCursor;
|
|
|
|
Export.ToFile();
|
|
MessageBox.Show("Export done!");
|
|
|
|
// reset stop date!!
|
|
Export.Project.Stop = null;
|
|
|
|
try
|
|
{
|
|
new Projects().Modify(Export.Project);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string error = String.Format("Could not change project.\n{0}", ex.Message);
|
|
MessageBox.Show(error, "Project details", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
dgvProjects_Populate();
|
|
ShowProjectDetails(SelectedProject);
|
|
ShowProjects(ProjectStatus.InProgress);
|
|
|
|
if(cbOpenMeta.Checked==true)
|
|
{
|
|
try // if .csv file is created succesfully, try to open it in META
|
|
{
|
|
string exportFile = txtbExportPath.Text + "\\" + txtbFilename.Text; // export file path + file name
|
|
string command = PathToAnalysisTool; // path of META
|
|
string file = String.Format("\"{0}\"", exportFile);
|
|
System.Diagnostics.Process.Start(command, file); // start META and enter corresponding .csv file
|
|
}
|
|
catch (Exception eTDA)
|
|
{
|
|
MessageBox.Show(String.Format("Could not start analysis!\n\n{0}", eTDA.Message), "Exporting");
|
|
}
|
|
}
|
|
ShowProjects(ProjectStatus.InProgress); // show projects which are in progress
|
|
this.Cursor = Cursors.Default;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Export to file failed!\n\n" + ex.Message, "Export", MessageBoxButtons.OK, MessageBoxIcon.Error); // <-- deze error komt vaak
|
|
return;
|
|
}
|
|
}
|
|
|
|
private void cboxInvProject_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void dgvProjects_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void lboxChambersDetails_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
}
|
|
|
|
private void dtpStartDate_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
}
|
|
|
|
private void dtpStartTime_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
}
|
|
|
|
private void dtpStopDate_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
}
|
|
|
|
private void dtpStopTime_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
timerProjectDetails.Stop();
|
|
timerProjectDetails.Start();
|
|
}
|
|
|
|
private void txtbNewStepNumber_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if(txtbNewStepNumber.Text != "")
|
|
btnNewProjectFindMIDS.PerformClick();
|
|
}
|
|
|
|
private void dgvSensors_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void lboxChambersNew_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void menuViewFind_Click(object sender, EventArgs e)
|
|
{
|
|
pnlFindProject.Visible = true;
|
|
txtbFindProjectNumber.Text = "";
|
|
txtbFindProjectSub.Text = "";
|
|
txtbFindProjectStep.Text = "";
|
|
}
|
|
|
|
private void btnFindCancel_Click(object sender, EventArgs e)
|
|
{
|
|
pnlFindProject.Visible = false;
|
|
}
|
|
|
|
private void txtbFindProjectSub_TextChanged(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void finishedLastMonthToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
ShowProjects(ProjectStatus.FinishedLastMonth);
|
|
}
|
|
|
|
private void finishedLastWeekToolStripMenuItem_Click(object sender, EventArgs e)
|
|
{
|
|
ShowProjects(ProjectStatus.FinishedLastWeek);
|
|
}
|
|
|
|
private void gbProjectList_Enter(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void btnChamberSensors_Click(object sender, EventArgs e)
|
|
{
|
|
lbChamberConditions.Items.Clear();
|
|
|
|
Project project = SelectedProject;
|
|
|
|
Chamber chamber = new Chamber();
|
|
try
|
|
{
|
|
chamber = new Chambers().GetByPK(project.Chamber);
|
|
if (chamber == null)
|
|
throw new Exception("new Chambers().GetByPK(project.PK) returned null");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("Could not retrieve chamber from database!\n\nError: " + ex.Message, "Export project", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return;
|
|
}
|
|
|
|
List<Sensor> sensors;
|
|
try
|
|
{
|
|
sensors = new Sensors().GetByChamber(project.Chamber);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sensors = new List<Sensor>(); // Zorg ervoor dat sensors altijd geïnitialiseerd is
|
|
}
|
|
|
|
|
|
for (int i = 0; i < sensors.Count; i++)
|
|
{
|
|
SqlConnection connection = new SqlConnection("Data Source=tcp:10.126.21.47\\FEANOR,1434; Initial Catalog=FEANOR; User ID=sa; Password=resam@123resam; timeout=15; Persist Security Info=True; TrustServerCertificate=True");
|
|
|
|
try
|
|
{
|
|
using (connection)
|
|
{
|
|
string query = " ";
|
|
if (chamber.Humidity == true)
|
|
{
|
|
query = "SELECT TOP 1 Value FROM Results WHERE SensorPK = @SensorPK AND TimeStamp >= DATEADD(MINUTE, -10, GETUTCDATE()) ORDER BY TimeStamp DESC ";
|
|
}
|
|
else
|
|
{
|
|
query = "SELECT TOP 1 Value FROM ResultsOudeHal WHERE SensorPK = @SensorPK AND TimeStamp >= DATEADD(MINUTE, -10, GETUTCDATE()) ORDER BY TimeStamp DESC";
|
|
}
|
|
|
|
SqlCommand command = new SqlCommand(query, connection);
|
|
command.Parameters.AddWithValue("@SensorPK", sensors[i].PK);
|
|
|
|
connection.Open();
|
|
|
|
object result = command.ExecuteScalar();
|
|
|
|
float resultvalue;
|
|
|
|
if (result != null)
|
|
{
|
|
resultvalue = Convert.ToSingle(result);
|
|
}
|
|
else
|
|
{
|
|
resultvalue = 0.0f;
|
|
}
|
|
|
|
Console.WriteLine(sensors[i].PK.ToString() + " " + resultvalue.ToString() + " " + sensors[i].Type.ToString());
|
|
|
|
if (sensors[i].Type == SensorType.Pt100)
|
|
{
|
|
lbChamberConditions.Items.Add("ch" + i.ToString() + " :\t" + resultvalue.ToString() + " °C");
|
|
}
|
|
else if (sensors[i].Type == SensorType.Voltage)
|
|
{
|
|
if (resultvalue > 0.1 ||resultvalue<-0.1)
|
|
{
|
|
lbChamberConditions.Items.Add("ch" + i.ToString() + " :\t" + resultvalue.ToString() + " V");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (resultvalue != 0.0) { lbChamberConditions.Items.Add("ch" + i.ToString() + " :\t" + resultvalue.ToString() + " % RH"); }
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|