This repository has been archived on 2019-05-20. You can view files and clone it, but cannot push or open issues or pull requests.
vn-fingerprint/LectorVerdnatura/frmPrincipal.cs

315 lines
12 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.Windows.Forms;
using System.IO;
using System.Collections;
using System.Diagnostics;
namespace LectorVerdnatura
{
public partial class frmPrincipal : Form
{
private sdklector lector;
private database db;
private static int WM_QUERYENDSESSION = 0x11;
private static bool systemShutdown = false;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_QUERYENDSESSION)
{
//MessageBox.Show("Detectado queryendsession: logoff, shutdown, or reboot");
systemShutdown = true;
}
// If this is WM_QUERYENDSESSION, the closing event should be
// raised in the base WndProc.
base.WndProc(ref m);
} //WndProc
public frmPrincipal()
{
InitializeComponent();
Process aProcess = Process.GetCurrentProcess();
string aProcName = aProcess.ProcessName;
if (Process.GetProcessesByName(aProcName).Length > 1)
{
string mensaje = " ===== AVISO: LA APLICACION YA ESTA EN EJECUCION!! =====" + Environment.NewLine + "Verifique si hay un icono en la barra de tareas, un proceso anterior colgado o ejecutandose en otra sesion." + Environment.NewLine + "Cerrando esta instancia...";
logevent.logeventwritefile(mensaje);
MessageBox.Show(mensaje,"Verdnatura Lector Huellas");
// Application.Exit(); ESTA FORMA NO FUNCIONA EN ESTA APLICACION
Environment.Exit(1);
}
lector = new sdklector();
this.Text = this.Text + " v. " + Application.ProductVersion.ToString();
if (Debugger.IsAttached)
{
logevent.logeventwritefile(" ===== Detectado Debugger.IsAttached: modo pruebas? Desactivamos opcion de borrar logs del fichador!");
chkBorrarLogs.Checked = false;
}
else
{
logevent.logeventwritefile(" ===== Debugger.IsAttached NO detectado. Se borraran los logs del lector tras la lectura.");
chkBorrarLogs.Checked = true;
}
db = new database();
logevent.logeventwritefile("Usando BDD: " + db.GetDBConnectionDescription());
CargarFichadores();
//obtengo la siguiente hora que se tiene que ejecutar para obtener los fichajes
String HoraActual = DateTime.Now.ToString("HH:mm");
timer1.Interval = db.proximotimer(HoraActual);
if (db.Gethayconexion()) db.CerrarConexion();
//logevent.logeventwritefile(" ===== Aplicacion inicializada ===== En 10 segundos se intentaran descargar los registros de todos los fichadores de la lista...");
//timer1.Interval = 10000;
//timer1.Enabled = true;
//timer1.Start();
ActualizarLog();
notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);
}
private void frmPrincipal_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.Hide();
this.notifyIcon1.Visible = true;
}
if (this.WindowState != FormWindowState.Minimized )
{
dataGrid1.Width = this.ClientSize.Width - dataGrid1.Left - 20;
dataGrid1.Height = this.ClientSize.Height - dataGrid1.Top - 20;
dataGrid1.Columns[0].Width = dataGrid1.Width - 50;
}
}
private void frmPrincipal_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (!this.Visible){
this.Show();
this.WindowState = FormWindowState.Normal;
this.notifyIcon1.Visible = false;}
}
private void notifyIcon1_DoubleClick(object Sender, EventArgs e)
{
frmPrincipal_MouseDoubleClick(Sender, null);
}
private void frmPrincipal_FormClosing(object sender, FormClosingEventArgs e)
{
if (!systemShutdown)
{
// Reset the variable because the user might cancel the shutdown.
systemShutdown = false;
DialogResult respuesta = MessageBox.Show("La aplicacion debe estar en marcha para recoger los fichajes!" + Environment.NewLine + "¿ Esta seguro de que desea cerrar la aplicacion ?", "Confirmacion", MessageBoxButtons.YesNo);
if (respuesta == DialogResult.No)
e.Cancel = true;
else
logevent.logeventwritefile("AVISO: FormClosing() ejecutado y el usuario confirmo el cierre: CERRANDO APLICACION....");
}
else {
logevent.logeventwritefile("AVISO: FormClosing() ejecutado y apagado del sistema detectado: CERRANDO APLICACION....");
}
//e.Cancel = true;
//this.WindowState = FormWindowState.Minimized;
//frmPrincipal_Resize(this, null);
}
private void Salir_Click(object sender, EventArgs e)
{
if (!systemShutdown)
{
// Reset the variable because the user might cancel the shutdown.
systemShutdown = false;
DialogResult respuesta = MessageBox.Show("La aplicacion debe estar en marcha para recoger los fichajes!" + Environment.NewLine + "¿ Esta seguro de que desea cerrar la aplicacion ?", "Confirmacion", MessageBoxButtons.YesNo);
if (respuesta == DialogResult.Yes)
{
this.notifyIcon1.Visible = false;
Application.Exit();
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false;
db=new database();
for (int i = 0; i <= lvFichadores.Items.Count-1; i++)
{
lector.Lipaddr = lvFichadores.Items[i].SubItems[2].Text;
lector.WarehouseFk = int.Parse(lvFichadores.Items[i].SubItems[0].Text);
logevent.logeventwritefile("Conectando a fichador: " + lvFichadores.Items[i].SubItems[2].Text + "...");
ActualizarLog();
if (lector.conexionlector() && db.Gethayconexion())
{
logevent.logeventwritefile("Descargando fichajes...");
ActualizarLog();
bool resultadoFichajes = lector.ObtenerFichajes(dataGrid1);
if (resultadoFichajes)
{
if (chkBorrarLogs.Checked)
{
if (lector.NumRegistros() > int.Parse(txtMaxRegistros.Text.ToString()))
{
lector.BorrarLogLector();
}
else
{
logevent.logeventwritefile("Por seguridad: Log no borrado por ser inferior a " + txtMaxRegistros.Text.ToString() + " registros...");
}
}
else
{
logevent.logeventwritefile(" ===== Detectado Debugger.IsAttached o casilla Borrar logs Fichadores desactivada: modo pruebas? no borramos los logs del lector!");
}
}
else
{
logevent.logeventwritefile(" ===== Error leyendo fichajes lector, borrado de fichajes cancelado!");
}
lector.ActualizarFechaLector();
lector.DesconexionLector();
}
}
//obtengo la siguiente hora que se tiene que ejecutar para obtener los fichajes
String HoraActual = DateTime.Now.ToString("HH:mm");
timer1.Interval=db.proximotimer(HoraActual);
if (db.Gethayconexion()) db.CerrarConexion();
logevent.logeventwritefile("Procesados todos los fichadores de la lista.");
ActualizarLog();
timer1.Enabled = true;
}
private void comprobarHoraLectorToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!lector.conexionlector()) return;
lector.ActualizarFechaLector();
lector.DesconexionLector();
}
public void CargarFichadores()
{
db = new database();
String[,] Fichadores = new string[10, 3];
db.CargarFichadoresDesdeBDD(ref Fichadores);
for (int numfich = 0; Fichadores[numfich, 0] != null; numfich++)
{
ListViewItem lvi = new ListViewItem(Fichadores[numfich, 0]);
lvi.SubItems.Add(Fichadores[numfich, 1]);
lvi.SubItems.Add(Fichadores[numfich, 2]);
lvFichadores.Items.Add(lvi);
};
}
private void button1_Click(object sender, EventArgs e)
{
String mensajeterminal="CONEXIÓN ESTABLECIDA";
if (this.lvFichadores.SelectedItems.Count != 1) {
MessageBox.Show("Debe de seleccionar un lector para realizar la conexión"); return; }
lector.Lipaddr = this.lvFichadores.SelectedItems[0].SubItems[2].Text;
if (!lector.conexionlector()) mensajeterminal="No hay conexión con el terminal";
lector.DesconexionLector();
MessageBox.Show(mensajeterminal);
}
private void button2_Click(object sender, EventArgs e)
{
ActualizarLog();
}
public void ActualizarLog()
{
ArrayList arrText = new ArrayList();
int inicio=0;
arrText = logevent.leerlog(); // devuelve todas las lineas del fichero
dataGrid1.Rows.Clear();
if (arrText.Count > 1000) { inicio = arrText.Count - 1000; }
for (int i = inicio; i < arrText.Count; i++)
dataGrid1.Rows.Add(arrText[i]);
dataGrid1.Rows[dataGrid1.Rows.Count - 1].Selected = true;
dataGrid1.FirstDisplayedScrollingRowIndex = dataGrid1.Rows.Count - 1;
Application.DoEvents();
}
private void btnDescargarFichajes_Click(object sender, EventArgs e)
{
logevent.logeventwritefile("Descargando fichajes...");
ActualizarLog();
timer1_Tick(null,null);
}
private void btnForzarBorrarLog_Click(object sender, EventArgs e)
{
string mensajeterminal = "";
if (this.lvFichadores.SelectedItems.Count != 1)
{
MessageBox.Show("Debe de seleccionar un UNICO lector para realizar el borrado"); return;
}
lector.Lipaddr = this.lvFichadores.SelectedItems[0].SubItems[2].Text;
logevent.logeventwritefile("Conectando a fichador: " + lector.Lipaddr.ToString() + " ...");
ActualizarLog();
if (!lector.conexionlector()) mensajeterminal = "No hay conexión con el terminal";
mensajeterminal = "Encontrados: " + lector.ContarRecordsLector() + " registros, borrando...";
logevent.logeventwritefile(mensajeterminal);
ActualizarLog();
lector.BorrarLogLector();
logevent.logeventwritefile("Registros borrados");
ActualizarLog();
lector.DesconexionLector();
}
private void txtMaxRegistros_Leave(object sender, EventArgs e)
{
if (! int.TryParse(txtMaxRegistros.Text.ToString(), out int numero))
{
MessageBox.Show("El valor del numero maximo de registros no es un numero valido y se ha cambiado a 300");
txtMaxRegistros.Text = "300";
}
}
private void frmPrincipal_Load(object sender, EventArgs e)
{
}
}//lector
}//namespace