diff --git a/EpdBase/EpdBase.cpp b/EpdBase/EpdBase.cpp index f36f3dc..04a37c0 100644 --- a/EpdBase/EpdBase.cpp +++ b/EpdBase/EpdBase.cpp @@ -24,7 +24,8 @@ void EpdBase::Epd2U::StartDiscover() FlushDiscoveryCache(port); DiscRV= Discover(port, DeviceIDs, MaxDevices, &DeviceCount); Commit(); - if (DiscRV == 1 && DeviceCount == 0) { + if (DiscRV == 1 && DeviceCount == 0) + { OnRV = EpdOn(); Commit(); Sleep(1100); diff --git a/EpdBaseClr/EpdBaseClr.cpp b/EpdBaseClr/EpdBaseClr.cpp index 15ce14b..e5c9bcf 100644 --- a/EpdBaseClr/EpdBaseClr.cpp +++ b/EpdBaseClr/EpdBaseClr.cpp @@ -24,7 +24,8 @@ int EpdBaseClr::Epd2::Connect() { b->CurrentDeviceID = 0; epd->StartDiscover(); - DiscRV = epd->DiscRV; + DiscRV = epd->DeviceCount; + DeviceCount = epd->DeviceCount; if (epd->DiscRV == 1 && epd->DeviceCount >= 0) b->CurrentDeviceID = epd->DeviceIDs[0]; return DiscRV; } diff --git a/EpdBaseClr/EpdBaseClr.h b/EpdBaseClr/EpdBaseClr.h index 6f0e8df..522a198 100644 --- a/EpdBaseClr/EpdBaseClr.h +++ b/EpdBaseClr/EpdBaseClr.h @@ -30,6 +30,7 @@ namespace EpdBaseClr { int DiscRV; int StatusRV; int ReadDosesRV; + int DeviceCount = 0; double Hp07; diff --git a/eDosStation/Converters.cs b/eDosStation/Converters.cs new file mode 100644 index 0000000..b7c6bb4 --- /dev/null +++ b/eDosStation/Converters.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Data; +using System.Windows.Media; + +namespace eDosStation +{ + class Converters + { + + public class BrushColorConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + Color rv = System.Windows.Media.Colors.Green; + if (value == null || (bool?)value ==true ) rv = System.Windows.Media.Colors.Red; + return new SolidColorBrush(rv); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } + } +} diff --git a/eDosStation/DataSet1.Designer.cs b/eDosStation/DataSet1.Designer.cs index 8de74fe..0902d1e 100644 --- a/eDosStation/DataSet1.Designer.cs +++ b/eDosStation/DataSet1.Designer.cs @@ -667,6 +667,10 @@ namespace eDosStation { private global::System.Data.DataColumn columnInst_CODE; + private global::System.Data.DataColumn columnMinWorkerDosisMargin; + + private global::System.Data.DataColumn columnMarginExceeded; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] public GetTaskInfoDataTable() { @@ -876,6 +880,22 @@ namespace eDosStation { } } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public global::System.Data.DataColumn MinWorkerDosisMarginColumn { + get { + return this.columnMinWorkerDosisMargin; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public global::System.Data.DataColumn MarginExceededColumn { + get { + return this.columnMarginExceeded; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] [global::System.ComponentModel.Browsable(false)] @@ -934,7 +954,9 @@ namespace eDosStation { double FNGain_ANGainValue, string InstallationActivity, string Description, - int Inst_CODE) { + int Inst_CODE, + double MinWorkerDosisMargin, + bool MarginExceeded) { GetTaskInfoRow rowGetTaskInfoRow = ((GetTaskInfoRow)(this.NewRow())); object[] columnValuesArray = new object[] { null, @@ -958,7 +980,9 @@ namespace eDosStation { FNGain_ANGainValue, InstallationActivity, Description, - Inst_CODE}; + Inst_CODE, + MinWorkerDosisMargin, + MarginExceeded}; rowGetTaskInfoRow.ItemArray = columnValuesArray; this.Rows.Add(rowGetTaskInfoRow); return rowGetTaskInfoRow; @@ -1010,6 +1034,8 @@ namespace eDosStation { this.columnInstallationActivity = base.Columns["InstallationActivity"]; this.columnDescription = base.Columns["Description"]; this.columnInst_CODE = base.Columns["Inst_CODE"]; + this.columnMinWorkerDosisMargin = base.Columns["MinWorkerDosisMargin"]; + this.columnMarginExceeded = base.Columns["MarginExceeded"]; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] @@ -1059,6 +1085,10 @@ namespace eDosStation { base.Columns.Add(this.columnDescription); this.columnInst_CODE = new global::System.Data.DataColumn("Inst_CODE", typeof(int), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnInst_CODE); + this.columnMinWorkerDosisMargin = new global::System.Data.DataColumn("MinWorkerDosisMargin", typeof(double), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnMinWorkerDosisMargin); + this.columnMarginExceeded = new global::System.Data.DataColumn("MarginExceeded", typeof(bool), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnMarginExceeded); this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] { this.columnID_Task}, true)); this.columnID_Task.AutoIncrement = true; @@ -1074,6 +1104,7 @@ namespace eDosStation { this.columnEPDRad.MaxLength = 2; this.columnInstallationActivity.MaxLength = 100; this.columnDescription.MaxLength = 500; + this.columnMarginExceeded.ReadOnly = true; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] @@ -1649,6 +1680,38 @@ namespace eDosStation { } } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public double MinWorkerDosisMargin { + get { + try { + return ((double)(this[this.tableGetTaskInfo.MinWorkerDosisMarginColumn])); + } + catch (global::System.InvalidCastException e) { + throw new global::System.Data.StrongTypingException("The value for column \'MinWorkerDosisMargin\' in table \'GetTaskInfo\' is DBNull.", e); + } + } + set { + this[this.tableGetTaskInfo.MinWorkerDosisMarginColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public bool MarginExceeded { + get { + try { + return ((bool)(this[this.tableGetTaskInfo.MarginExceededColumn])); + } + catch (global::System.InvalidCastException e) { + throw new global::System.Data.StrongTypingException("The value for column \'MarginExceeded\' in table \'GetTaskInfo\' is DBNull.", e); + } + } + set { + this[this.tableGetTaskInfo.MarginExceededColumn] = value; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] public bool IsTask_NameNull() { @@ -1888,6 +1951,30 @@ namespace eDosStation { public void SetInst_CODENull() { this[this.tableGetTaskInfo.Inst_CODEColumn] = global::System.Convert.DBNull; } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public bool IsMinWorkerDosisMarginNull() { + return this.IsNull(this.tableGetTaskInfo.MinWorkerDosisMarginColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public void SetMinWorkerDosisMarginNull() { + this[this.tableGetTaskInfo.MinWorkerDosisMarginColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public bool IsMarginExceededNull() { + return this.IsNull(this.tableGetTaskInfo.MarginExceededColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + public void SetMarginExceededNull() { + this[this.tableGetTaskInfo.MarginExceededColumn] = global::System.Convert.DBNull; + } } /// @@ -2276,6 +2363,8 @@ namespace eDosStation.DataSet1TableAdapters { tableMapping.ColumnMappings.Add("InstallationActivity", "InstallationActivity"); tableMapping.ColumnMappings.Add("Description", "Description"); tableMapping.ColumnMappings.Add("Inst_CODE", "Inst_CODE"); + tableMapping.ColumnMappings.Add("MinWorkerDosisMargin", "MinWorkerDosisMargin"); + tableMapping.ColumnMappings.Add("MarginExceeded", "MarginExceeded"); this._adapter.TableMappings.Add(tableMapping); } @@ -2296,13 +2385,14 @@ namespace eDosStation.DataSet1TableAdapters { this._commandCollection[0].CommandType = global::System.Data.CommandType.StoredProcedure; this._commandCollection[0].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@RETURN_VALUE", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.ReturnValue, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); this._commandCollection[0].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ID_Task", global::System.Data.SqlDbType.Int, 4, global::System.Data.ParameterDirection.Input, 10, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); + this._commandCollection[0].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@WorkerDosisMargin", global::System.Data.SqlDbType.Float, 8, global::System.Data.ParameterDirection.Input, 53, 0, null, global::System.Data.DataRowVersion.Current, false, null, "", "", "")); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)] - public virtual int Fill(DataSet1.GetTaskInfoDataTable dataTable, global::System.Nullable ID_Task) { + public virtual int Fill(DataSet1.GetTaskInfoDataTable dataTable, global::System.Nullable ID_Task, global::System.Nullable WorkerDosisMargin) { this.Adapter.SelectCommand = this.CommandCollection[0]; if ((ID_Task.HasValue == true)) { this.Adapter.SelectCommand.Parameters[1].Value = ((int)(ID_Task.Value)); @@ -2310,6 +2400,12 @@ namespace eDosStation.DataSet1TableAdapters { else { this.Adapter.SelectCommand.Parameters[1].Value = global::System.DBNull.Value; } + if ((WorkerDosisMargin.HasValue == true)) { + this.Adapter.SelectCommand.Parameters[2].Value = ((double)(WorkerDosisMargin.Value)); + } + else { + this.Adapter.SelectCommand.Parameters[2].Value = global::System.DBNull.Value; + } if ((this.ClearBeforeFill == true)) { dataTable.Clear(); } @@ -2321,7 +2417,7 @@ namespace eDosStation.DataSet1TableAdapters { [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)] - public virtual DataSet1.GetTaskInfoDataTable GetData(global::System.Nullable ID_Task) { + public virtual DataSet1.GetTaskInfoDataTable GetData(global::System.Nullable ID_Task, global::System.Nullable WorkerDosisMargin) { this.Adapter.SelectCommand = this.CommandCollection[0]; if ((ID_Task.HasValue == true)) { this.Adapter.SelectCommand.Parameters[1].Value = ((int)(ID_Task.Value)); @@ -2329,6 +2425,12 @@ namespace eDosStation.DataSet1TableAdapters { else { this.Adapter.SelectCommand.Parameters[1].Value = global::System.DBNull.Value; } + if ((WorkerDosisMargin.HasValue == true)) { + this.Adapter.SelectCommand.Parameters[2].Value = ((double)(WorkerDosisMargin.Value)); + } + else { + this.Adapter.SelectCommand.Parameters[2].Value = global::System.DBNull.Value; + } DataSet1.GetTaskInfoDataTable dataTable = new DataSet1.GetTaskInfoDataTable(); this.Adapter.Fill(dataTable); return dataTable; diff --git a/eDosStation/DataSet1.xsd b/eDosStation/DataSet1.xsd index ed92e60..f6f9284 100644 --- a/eDosStation/DataSet1.xsd +++ b/eDosStation/DataSet1.xsd @@ -37,6 +37,7 @@ + @@ -65,6 +66,8 @@ + + @@ -76,7 +79,7 @@ - + @@ -104,7 +107,7 @@ - + @@ -159,6 +162,8 @@ + + diff --git a/eDosStation/DataSet1.xss b/eDosStation/DataSet1.xss index 0f7f06e..8c4c522 100644 --- a/eDosStation/DataSet1.xss +++ b/eDosStation/DataSet1.xss @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/eDosStation/EntryBadge.xaml b/eDosStation/EntryBadge.xaml index abf23a3..a3e6af6 100644 --- a/eDosStation/EntryBadge.xaml +++ b/eDosStation/EntryBadge.xaml @@ -6,11 +6,16 @@ xmlns:local="clr-namespace:eDosStation" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" x:Class="eDosStation.EntryBadge" mc:Ignorable="d" - Title="EntryBadge" Height="450" Width="800" Loaded="Window_Loaded"> + Title="EntryBadge" Height="768" Width="1024" Loaded="Window_Loaded" FontFamily="Comic Sans MS"> + + + + + @@ -41,7 +46,17 @@ - + + + + + + + + + + + @@ -51,16 +66,29 @@ > - - + - - - + + + + + + + + @@ -121,6 +149,7 @@ + @@ -133,14 +162,21 @@ - + + - - + + + + + + + + diff --git a/eDosStation/EntryBadge.xaml.cs b/eDosStation/EntryBadge.xaml.cs index ca497e1..2a1743c 100644 --- a/eDosStation/EntryBadge.xaml.cs +++ b/eDosStation/EntryBadge.xaml.cs @@ -17,7 +17,7 @@ using System.Windows.Threading; namespace eDosStation { - + /// /// Interaction logic for EntryBadge.xaml @@ -68,7 +68,7 @@ namespace eDosStation { dispatcherTimer.Stop(); ep.Connect(); - if (ep.DiscRV == 1 && ep.b.CurrentDeviceID >= 0) + if (ep.DeviceCount == 1) { EpdFound = true; DoEPD(); @@ -148,7 +148,7 @@ namespace eDosStation //ep.K5 = 13100; //ep.K6 = 1310; - if (ep.K6!=1310) + if (ep.K6 != 1310) { MessageBox.Show("Alarm"); } @@ -157,6 +157,7 @@ namespace eDosStation } ep.SetIssued(); + IssueOK.Visibility = Visibility.Visible; } } @@ -166,14 +167,14 @@ namespace eDosStation ep = new EpdBaseClr.Epd2(Properties.Settings.Default.comport); ep.Connect(); - if (ep.DiscRV == 1 && ep.b.CurrentDeviceID >= 0) + if (ep.DeviceCount == 1) { EpdFound = true; DoEPD(); } if (!EpdFound) { - statusEPD.Text= $"EPD: Wait "; + statusEPD.Text = $"EPD: Wait "; Search = 100; dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += DispatcherTimer_Tick; @@ -182,15 +183,18 @@ namespace eDosStation return; } - + } void AskTask() { - + eDosStation.DataSet1 dataSet1 = ((eDosStation.DataSet1)(this.FindResource("dataSet1"))); + using (var dataSet1GetTaskInfoTableAdapter = new eDosStation.DataSet1TableAdapters.GetTaskInfoTableAdapter()) + { + dataSet1GetTaskInfoTableAdapter.Fill(dataSet1.GetTaskInfo, null, _User.Margin); + } tbTask.IsSelected = true; - } void CheckBadge() @@ -262,24 +266,75 @@ namespace eDosStation private void TaskOK_Click(object sender, RoutedEventArgs e) { - tbEPD.IsSelected = true; - System.Windows.Data.CollectionViewSource getTaskListViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("getTaskListViewSource"))); - var rv = getTaskListViewSource.View.CurrentItem as DataRowView; - CurTaskRow = rv.Row as DataSet1.GetTaskInfoRow; - - GetEPD(); + bool isOk = false; + switch (TaskOK.Tag) + { + case "A": //No access + break; + case "M": //Margin + break; + case "B": // Badge + break; + case "L": //Locked + break; + case "O": // OK + isOk = true; + break; + } + + if (isOk) + { + tbEPD.IsSelected = true; + System.Windows.Data.CollectionViewSource getTaskListViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("getTaskListViewSource"))); + var rv = getTaskListViewSource.View.CurrentItem as DataRowView; + CurTaskRow = rv.Row as DataSet1.GetTaskInfoRow; + GetEPD(); + } } private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { var lb = sender as ListBox; - DataRowView o; + DataRowView o = null; if (e.AddedItems.Count > 0) { o = e.AddedItems[0] as DataRowView; } + bool exceeded = false; + if (o != null) + { + exceeded = (((DataSet1.GetTaskInfoRow)o.Row).MarginExceeded); + } + if (_User == null) { TaskOK.Content = "Badge"; TaskOK.Tag = "B"; } + else if (_User.AccessAllow != true) { TaskOK.Content = "No Access"; TaskOK.Tag = "A"; } + else if (_User.VisitIDLocked == true) { TaskOK.Content = "Locked"; TaskOK.Tag = "L"; } + else if (exceeded == true) { TaskOK.Content = "No Margin"; TaskOK.Tag = "M"; } + else + { + TaskOK.Content = "OK"; TaskOK.Tag = "O"; + } + } + + + + private void CbAlara_Checked(object sender, RoutedEventArgs e) + { + + bool isAlara = (cbAlara.IsChecked == true); + if (isAlara) cbAlara.Content = "Alara"; else cbAlara.Content = "Normal"; + //cbNormal.IsChecked = !isAlara; + System.Windows.Data.CollectionViewSource getTaskListViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("getTaskListViewSource"))); + + var dv = getTaskListViewSource.View.SourceCollection as DataView; + if (isAlara) dv.RowFilter = "ID_Task>=1000"; else dv.RowFilter = "ID_Task<1000"; + getTaskListViewSource.View.MoveCurrentToFirst(); + + } + + + private void Starter() { a = new OkReadBadge.Badging(Msg); @@ -287,15 +342,17 @@ namespace eDosStation } private void Window_Loaded(object sender, RoutedEventArgs e) { + tbEntry.IsSelected = true; + IssueOK.Visibility = Visibility.Hidden; eDosStation.DataSet1 dataSet1 = ((eDosStation.DataSet1)(this.FindResource("dataSet1"))); - using (eDosStation.DataSet1TableAdapters.GetTaskListTableAdapter dataSet1GetTaskListTableAdapter = new eDosStation.DataSet1TableAdapters.GetTaskListTableAdapter()) - { - dataSet1GetTaskListTableAdapter.Fill(dataSet1.GetTaskList); - } + //using (eDosStation.DataSet1TableAdapters.GetTaskListTableAdapter dataSet1GetTaskListTableAdapter = new eDosStation.DataSet1TableAdapters.GetTaskListTableAdapter()) + //{ + // dataSet1GetTaskListTableAdapter.Fill(dataSet1.GetTaskList); + //} using (var dataSet1GetTaskInfoTableAdapter = new eDosStation.DataSet1TableAdapters.GetTaskInfoTableAdapter()) { - dataSet1GetTaskInfoTableAdapter.Fill(dataSet1.GetTaskInfo,null); + dataSet1GetTaskInfoTableAdapter.Fill(dataSet1.GetTaskInfo, null, null); } @@ -308,10 +365,12 @@ namespace eDosStation //t = new System.Threading.Thread(() => Starter()); //t.Start(); + ////Debug - _User = new User("0428790A0B4E80",string.Empty); - Dispatcher.Invoke(AskTask); + _User = new User("0428790A0B4E80", string.Empty); + + Dispatcher.InvokeAsync(AskTask); } } } diff --git a/eDosStation/EpdEntry.xaml.cs b/eDosStation/EpdEntry.xaml.cs index 8bc0bf9..ba00ba3 100644 --- a/eDosStation/EpdEntry.xaml.cs +++ b/eDosStation/EpdEntry.xaml.cs @@ -52,7 +52,7 @@ namespace eDosStation { ep = new EpdBaseClr.Epd2(Properties.Settings.Default.comport); ep.Connect(); - if (ep.DiscRV == 1 && ep.b.CurrentDeviceID > 0) + if (ep.DeviceCount == 1 ) { EpdFound = true; statusEPD.Content = $"EPD: {ep.b.CurrentDeviceID}"; @@ -67,14 +67,13 @@ namespace eDosStation dispatcherTimer.Interval = new TimeSpan(0, 0, 2); dispatcherTimer.Start(); } - } private void DispatcherTimer_Tick(object sender, EventArgs e) { dispatcherTimer.Stop(); ep.Connect(); - if (ep.DiscRV == 1 && ep.b.CurrentDeviceID > 0) + if (ep.DeviceCount == 1 ) { EpdFound = true; statusEPD.Content = $"EPD: {ep.b.CurrentDeviceID}"; @@ -90,9 +89,7 @@ namespace eDosStation { statusEPD.Content = $"Search Timeout"; } - } - } private void BIssue_Click(object sender, RoutedEventArgs e) @@ -105,7 +102,6 @@ namespace eDosStation ep.WearerName = wName.Text; ep.SetIssued(); this.Close(); - } private void Window_Unloaded(object sender, RoutedEventArgs e) diff --git a/eDosStation/EpdExit.xaml b/eDosStation/EpdExit.xaml index 8d533ee..3bad565 100644 --- a/eDosStation/EpdExit.xaml +++ b/eDosStation/EpdExit.xaml @@ -10,32 +10,72 @@ - - - - - - - - - - + + - + + + + + + + + + + + + + + - - - - - - - - - -