This commit is contained in:
Luc Vandenbroucke 2022-04-27 16:12:21 +02:00
parent a597ba45b2
commit c3dc4a340e
5 changed files with 186 additions and 12 deletions

View file

@ -327,3 +327,39 @@ ELSE
[AllowMultipleEPD]=@AllowMultipleEPD
WHERE [PCNr] = HOST_NAME();
go
CREATE OR ALTER PROCEDURE [dbo].[VisitInfo] @EPDVisitID INT = 51905,
@hasExited BIT = 0 OUT,
@isManualExit BIT = 0 OUT
AS
--DECLARE @EPDVisitID INT= 51905
BEGIN
SET NOCOUNT ON;
DECLARE
@ID_Visit INT,
@ID_Station INT;
SET @ID_Station = @EPDVisitID % 100;
SET @ID_Visit = @EPDVisitID / 100;
SET @hasExited = 0;
SET @isManualExit = 0;
SELECT
@hasExited = CONVERT(BIT, CASE WHEN [ReturnTime] IS NOT NULL OR [isManualExit] = 1 THEN 1 ELSE 0 END),
@isManualExit = ISNULL([isManualExit], 0)
FROM [dbo].[Visit]
WHERE [ID_Visit] = @ID_Visit
AND [ID_Station] = @ID_Station;
SET NOCOUNT OFF;
SELECT [hasExited] = @hasExited;
RETURN CASE WHEN ISNULL(@hasExited, 0) = 1 THEN 1 ELSE 0 END + CASE WHEN ISNULL(@isManualExit, 0) = 1 THEN 2 ELSE 0 END;
END;
GO
GRANT EXECUTE ON [dbo].[VisitInfo] TO [eDosStation];
GO

View file

@ -15,7 +15,7 @@ namespace eDosStation
public SqlConnection localConnection, centralConnection;
internal CLog splunkLog;
public System.Data.SqlClient.SqlCommand VisitInitCommand;
public System.Data.SqlClient.SqlCommand VisitInitCommand, VisitInfoCommand;
public static SqlCommand VisitExitCommand;
public static SqlCommand NextIDCommand;
public static SqlCommand LastIDCommand;
@ -262,6 +262,14 @@ namespace eDosStation
, new System.Data.SqlClient.SqlParameter("isAlarm",SqlDbType.Bit,0,System.Data.ParameterDirection.Input,true,0,0,null,System.Data.DataRowVersion.Default,null)
, new System.Data.SqlClient.SqlParameter("isFault",SqlDbType.Bit,0,System.Data.ParameterDirection.Input,true,0,0,null,System.Data.DataRowVersion.Default,null)
});
VisitInfoCommand = new System.Data.SqlClient.SqlCommand("[dbo].[VisitInfo]", localConnection) { CommandType = System.Data.CommandType.StoredProcedure };
VisitInfoCommand.Parameters.AddRange(new System.Data.SqlClient.SqlParameter[] {
new System.Data.SqlClient.SqlParameter("RETURN_VALUE",SqlDbType.Int,0,System.Data.ParameterDirection.ReturnValue,false,0,0,null,System.Data.DataRowVersion.Default,null)
,new System.Data.SqlClient.SqlParameter("EPDVisitID",SqlDbType.Int,0,System.Data.ParameterDirection.Input,false,0,0,null,System.Data.DataRowVersion.Default,null)
,new System.Data.SqlClient.SqlParameter("hasExited",SqlDbType.Bit,0,System.Data.ParameterDirection.Output,false,0,0,null,System.Data.DataRowVersion.Default,null)
,new System.Data.SqlClient.SqlParameter("isManualExit",SqlDbType.Bit,0,System.Data.ParameterDirection.Output,false,0,0,null,System.Data.DataRowVersion.Default,null)
});
ReverseSyncCommand = new System.Data.SqlClient.SqlCommand("syncLoc.UpdateRemoteReturns", localConnection) { CommandType = System.Data.CommandType.StoredProcedure };
SqlCommandBuilder.DeriveParameters(ReverseSyncCommand);
@ -273,6 +281,27 @@ namespace eDosStation
if (oldState == ConnectionState.Closed) localConnection.Close();
}
public int VisitInfo(int EpdVisitID)
{
int? rv = 0;
const string taskName = "VisitInfo";
try
{
VisitInfoCommand.Parameters["EPDVisitID"].Value = EpdVisitID;
checkCon(true);
VisitInfoCommand.Connection = localConnection;
VisitInfoCommand.ExecuteScalar();
rv = (int?)VisitInfoCommand.Parameters["RETURN_VALUE"].Value;
bool? hasExited = (bool?)VisitInfoCommand.Parameters["hasExited"].Value;
bool? isManualExit = (bool?)VisitInfoCommand.Parameters["isManualExit"].Value;
}
catch (System.Exception ex)
{
splunkLog?.WriteException(moduleName, taskName, ex);
}
if (rv == null) rv = 0;
return rv.Value;
}
public void VisitExit(int EpdVisitID, EpdBaseClr.Epd2 ep)
{
const string taskName = "VisitExit";
@ -339,13 +368,8 @@ namespace eDosStation
VisitExitCommand.SetBoolParam("isAlarm", ep.hasAlarm);
VisitExitCommand.SetBoolParam("isFault", ep.eDosHasFault);
checkCon(true);
VisitExitCommand.Connection = localConnection;
VisitExitCommand.ExecuteNonQuery();
}
catch (System.Exception ex)
@ -419,7 +443,7 @@ namespace eDosStation
else u.hasEPD = false;
u.activeVisit = dr.IntOrNull("activeVisit");
u.isAgent = dr.BoolOrFalse("isAgent");
u.AllOk = (!CheckUser || (u.AccessAllow == true && u.VisitIDLocked == 0));
u.AllOk = !CheckUser && u.VisitIDLocked==0 && u.AccessAllow == true ;
}
else
{

View file

@ -108,6 +108,14 @@ namespace eDosStation
return;
}
//Check id EPD is manual exit
int Exited = dataInterface.VisitInfo(EpdVisitID);
if (Exited>0)
{
endWithMessage($"This EPD was already returned or had a manual exit (ID:{EpdVisitID % 100})");
return;
}
//bool NoTimeout = false;

View file

@ -1,6 +1,8 @@
using System.Collections.ObjectModel;
using System;
using System.Collections.ObjectModel;
using System.Text;
using System.Windows;
using System.Windows.Threading;
namespace eDosStation
{
@ -28,6 +30,9 @@ namespace eDosStation
public partial class Settings : Window
{
public LSWDesfirePublic.CCard dfReader = null;
private System.Threading.Tasks.Task ReaderTask = null;
User _User;
Station thisStation;
ObservableCollection<beepclass> beepValues = new ObservableCollection<beepclass>();
ObservableCollection<readerclass> readerValues = new ObservableCollection<readerclass>();
@ -80,6 +85,7 @@ namespace eDosStation
private void Window_Loaded(object sender, RoutedEventArgs e)
{
string eDosCom = devcon.FindEdosCom();
try
{
@ -171,7 +177,6 @@ namespace eDosStation
{
MessageBox.Show($"SerINstallations err {ex.Message}");
}
try
{
tBeep.SelectedValue = thisStation.useBeep;
@ -195,7 +200,84 @@ namespace eDosStation
{
MessageBox.Show($"Interface check {ex.Message}");
}
//StartReader();
}
#region BadgeReader
public void StartReader()
{
if (dfReader == null)
{
dfReader = new LSWDesfirePublic.CCard();
dfReader.GetReaderList();
if (dfReader.readersList.Contains(thisStation.Reader))
{
dfReader.SetReader(thisStation.Reader);
dfReader.Badged += DFReader_Badged;
dfReader.BadgeTO += DfReader_BadgeTO;
dfReader.BadgeError += DfReader_BadgeError;
ReaderTask = dfReader.Wait(5000, 10);
}
else
{
StringBuilder er = new StringBuilder($"Badgelezer \"{thisStation.Reader}\" niet gevonden!.\nDeze lezers zijn beschikbaar:\n");
dfReader.GetReaderList();
foreach (string r in dfReader.readersList) er.AppendLine($"-> {r}");
MessageBox.Show(er.ToString(), "Badge Lezer", MessageBoxButton.OK, MessageBoxImage.Exclamation);
dfReader.Dispose(); dfReader = null;
}
}
}
void CheckBadge()
{
thisStation.splunkLog?.KvSet(LSWLib.CLog.skeys.persID, _User.PersID);
thisStation.splunkLog?.WriteSplunkLog("CheckBadge", LSWLib.CLog.iseverity.info, _User.PersID.ToString(), null);
//Dispatcher.InvokeAsync(() => { ShowUserInfo(); });
}
public void showBadge(int persID, string csn)
{
//CSN.Text = csn;
//Site.Text = string.Empty;
//Code.Text = persID.ToString();
_User = thisStation.dataInterface.GetUser(null, persID.ToString(), true);
Dispatcher.InvokeAsync(CheckBadge, DispatcherPriority.Normal);
}
private void DfReader_BadgeError(LSWDesfirePublic.CCard Sender, LSWDesfirePublic.BadgeErrorEventArgs e)
{
// endPage();
}
private void DfReader_BadgeTO(LSWDesfirePublic.CCard Sender, EventArgs e)
{
//this.Dispatcher.InvokeAsync(new Action(() => endPage()), DispatcherPriority.Normal);
}
private void DFReader_Badged(LSWDesfirePublic.CCard Sender, LSWDesfirePublic.BadgeEventArgs e)
{
if (e.PersID > 0)
this.Dispatcher.InvokeAsync(new Action(() => showBadge(e.PersID, e.UID)), DispatcherPriority.Background);
else
{
string msg = $"No PersID found on badge {e.UID}";
MessageBox.Show(msg, "Error", MessageBoxButton.OK);
thisStation.splunkLog?.WriteSplunkLog("Badged", LSWLib.CLog.iseverity.warning, null, msg);
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
//try
//{
// if (dfReader != null )
// {
// dfReader.WaitEnd();
// System.Threading.Thread.Sleep(2000);
// dfReader.Dispose();
// dfReader = null;
// }
//}
//catch (System.Exception ex)
//{
// System.Diagnostics.Debug.WriteLine(ex.Message);
//}
}
#endregion
}
}

View file

@ -1,4 +1,5 @@
using LSWLib;
using System.Runtime.InteropServices;
using LSWLib;
using System;
using System.Data;
using System.Data.SqlClient;
@ -8,6 +9,7 @@ using spl = LSWLib.CLog;
namespace syncEdosLocal
{
class cResult
{
@ -94,6 +96,12 @@ namespace syncEdosLocal
class Program
{
[DllImport("kernel32.dll")] static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_HIDE = 0;
const int SW_SHOW = 5;
const string moduleName = "syncEdosLocal";
public static string pcName;
public static int Verbose;
@ -322,9 +330,19 @@ namespace syncEdosLocal
}
}
if (Verbose > 0)
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_SHOW);
oStream = new System.IO.StreamWriter(System.Console.OpenStandardOutput());
}
else
{
oStream = null; // new System.IO.StreamWriter( System.IO.Stream.Null);
var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
//// Show
//ShowWindow(handle, SW_SHOW);
}
pcName = System.Environment.MachineName;
@ -536,5 +554,11 @@ namespace syncEdosLocal
{
spLog.Connection_InfoMessageLog(e, ref messages);
}
static Program()
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
}
}
}