Example #1
0
        protected void BtnDescargar_Click(object sender, EventArgs e)
        {
            log.Info(String.Format("El usuario [{0}] presiono el boton para descargar la plantilla del Control de Acceso con ID: [{1}]", UsuarioActual.Nombre, txtControlAcceso.SelectedValue));

            // Validar si se selecciono un control de acceso
            if (!ValidarObjeto(txtControlAcceso.SelectedValue))
            {
                MostrarAdvertencia(Constantes.MENSAJE_CAMPO_REQUERIDO_TITULO, "Por favor seleccione un control del listado");
                return;
            }

            ControlAcceso control = null;

            try
            {
                control = controlAccesoDao.GetById(Int32.Parse(txtControlAcceso.SelectedValue));
            }
            catch (Exception ex)
            {
                log.Error(String.Format("Error en el Proceso de Conexion con el control. Mensaje: [{0}]", ex.Message));
                ManejarExcepcion(ex);
            }

            if (control == null)
            {
                MostrarAdvertencia("Control de Acceso No Encontrado", String.Format("No fue Posible encontrar el Control de Acceso con identificador [0]", txtControlAcceso.SelectedValue));
                return;
            }


            // Variables de cajon
            int    iMachineNumber  = 1;
            string sdwEnrollNumber = Constantes.TEXTO_BLANCO;
            string sName           = Constantes.TEXTO_BLANCO;
            string sPassword       = Constantes.TEXTO_BLANCO;
            int    iPrivilege      = 0;
            bool   bEnabled        = false;
            int    idwErrorCode    = 0;

            int    idwFingerIndex;
            string sTmpData   = Constantes.TEXTO_BLANCO;
            int    iTmpLength = 0;
            int    iFlag      = 0;


            try
            {
                log.Info(String.Format("Se Intentará conectar con el control de acceso con ID: [{0}]. El control tiene la direccion ip: [{1}] y el puerto: [{2}]", txtControlAcceso.SelectedValue, control.DireccionIp, control.Puerto));

                CZKEMClass _control = new CZKEMClass();
                if (_control.Connect_Net(control.DireccionIp, Int32.Parse(control.Puerto.Value.ToString())))
                {
                    log.Info(String.Format("Se logro correctamente la conexion con el control con direccion ip: [{0}] y el puerto: [{1}]", control.DireccionIp, control.Puerto));

                    _control.EnableDevice(iMachineNumber, false);
                    _control.ReadAllUserID(iMachineNumber);   //read all the user information to the memory
                    _control.ReadAllTemplate(iMachineNumber); //read all the users' fingerprint templates to the memory


                    while (_control.SSR_GetAllUserInfo(iMachineNumber, out sdwEnrollNumber, out sName, out sPassword, out iPrivilege, out bEnabled))//get all the users' information from the memory
                    {
                        log.Info(String.Format("Se obtienen los datos iMachineNumber: [{0}], sdwEnrollNumber: [{1}], sName: [{2}], sPassword: [{3}], iPrivilege: [{4}], bEnabled: [{5}]", iMachineNumber, sdwEnrollNumber, sName, sPassword, iPrivilege, bEnabled));

                        for (idwFingerIndex = 0; idwFingerIndex < 10; idwFingerIndex++)
                        {
                            if (_control.GetUserTmpExStr(iMachineNumber, sdwEnrollNumber, idwFingerIndex, out iFlag, out sTmpData, out iTmpLength))//get the corresponding templates string and length from the memory
                            {
                                log.Info(String.Format("Se obtienen los datos idwFingerIndex: [{0}], iFlag: [{1}], sTmpData: [{2}], iTmpLength: [{3}]", idwFingerIndex, iFlag, sTmpData, iTmpLength));


                                try
                                {
                                    DbDominio.Plantilla planti = plantillaDao.GetByControlAccesoEnrollNumberFingerIndex(control, sdwEnrollNumber, idwFingerIndex);

                                    if (planti == null)
                                    {
                                        planti = new DbDominio.Plantilla();
                                        planti.ControlAcceso      = control;
                                        planti.Usuario_creado_por = UsuarioActual;
                                        log.Info("Se creará una plantilla nueva a partir de estos datos");
                                    }
                                    else
                                    {
                                        log.Info("Esta es una plantilla nueva que se insertara");
                                    }

                                    planti.FechaModificacion      = DateTime.Now;
                                    planti.Usuario_modificado_por = UsuarioActual;
                                    planti.Enabled           = bEnabled;
                                    planti.Enrollnumber      = sdwEnrollNumber;
                                    planti.Fingerindex       = idwFingerIndex;
                                    planti.Flag              = iFlag;
                                    planti.IpControlTemplate = control.DireccionIp;
                                    planti.Nombre            = sName;
                                    planti.Password          = sPassword;
                                    planti.Privilege         = iPrivilege;
                                    planti.Status            = true;
                                    planti.Tmpdata           = sTmpData;
                                    plantillaDao.SaveOrUpdate(planti);

                                    try
                                    {
                                        Empleado empleado = empleadoDao.GetByNumeroEmpleado(Int32.Parse(sdwEnrollNumber));
                                        if (empleado != null && control != null)
                                        {
                                            EmpleadoControlAcceso eca = empleadoControlAccesoDao.GetByControlAcceso(control, empleado);
                                            if (eca == null)
                                            {
                                                eca = new EmpleadoControlAcceso();
                                            }
                                            eca.CveEmpleado      = empleado.CveEmpleado;
                                            eca.CveControlAcceso = control.CveControlAcceso;
                                            eca.ControlAcceso    = control;
                                            eca.Empleado         = empleado;

                                            empleadoControlAccesoDao.SaveOrUpdate(eca);
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        log.Error(String.Format("Error en el Proceso Guardar Empleado Control de Acceso en la base de Datos. Mensaje: [{0}]", ex.Message));
                                        log.Error(ex);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    log.Error(String.Format("Error en el Proceso Guardar Plantilla en la base de Datos. Mensaje: [{0}]", ex.Message));
                                    log.Error(ex);
                                }
                            }
                        }
                    }

                    _control.Disconnect();
                    MostrarExito("Proceso Completo", "Se completo el proceso exitosamente");
                }
                else
                {
                    _control.GetLastError(ref idwErrorCode);
                    log.Error(String.Format("Error en el Proceso de Conexion al control con ID [{0}], Direccion IP [{1}] y Puerto [{2}]. Codigo de Error [{3}]", control.IdControl, control.DireccionIp, control.Puerto, idwErrorCode));
                    MostrarExcepcion("Conexion Invalida", String.Format("Error en el Proceso de Conexion con el Control con Direccion IP: {0} y Puerto {1}", control.DireccionIp, control.Puerto));
                }
            }

            catch (Exception ex)
            {
                log.Error(String.Format("Error en el Proceso de Conexion con el control. Mensaje: [{0}]", ex.Message));
                ManejarExcepcion(ex);
            }
        }
Example #2
0
        public static void iniciarColeccion()
        {
            // Variables de Cajon
            int    iMachineNumber  = 1;
            int    idwErrorCode    = 0;
            string sdwEnrollNumber = Constantes.TEXTO_BLANCO;
            int    idwVerifyMode   = 0;
            int    idwInOutMode    = 0;
            int    idwYear         = 0;
            int    idwMonth        = 0;
            int    idwDay          = 0;
            int    idwHour         = 0;
            int    idwMinute       = 0;
            int    idwSecond       = 0;
            int    idwWorkcode     = 0;

            // Variables de acceso a la base de datos
            IControlAccesoDao                controlAccesoDao                = daoFactory.GetControlAccesoDao();
            IColectorMovimientoDao           colectorMovimientoDao           = daoFactory.GetColectorMovimientosDao();
            IColectorMovimientoIncidenciaDao colectorMovimientoIncidenciaDao = daoFactory.GetColectorMovimientosIncidenciaDao();
            IEmpleadoDao   empleadoDao   = daoFactory.GetEmpleadoDao();
            IIncidenciaDao incidenciaDao = daoFactory.GetIncidenciaDao();

            logger.Info("PROCESO COLECTOR: Ejecucion automatica de la tarea de coleccion");

            List <ControlAcceso> lista = null;

            try
            {
                lista = controlAccesoDao.GetListado(true, null, DbDao.ControlAccesoDao.Ordenamiento.FechaUltimaConexion);
            }
            catch (Exception ex)
            {
                logger.Error(String.Format("Error al intentar obtener la lista de Controles de Acceso. Detalles: [{0}]", ex.Message), ex);
            }



            if (lista != null && lista.Count > 0)
            {
                foreach (ControlAcceso control in lista)
                {
                    logger.Info(String.Format("Procesando control con Nombre: [{0}], Direccion IP: [{1}] y Puerto: [{2}]", control.Nombre, control.DireccionIp, control.Puerto));

                    try
                    {
                        CZKEMClass _control = new CZKEMClass();
                        if (_control.Connect_Net(control.DireccionIp, Int32.Parse(control.Puerto.Value.ToString())))
                        {
                            // Deshabilitanos el control
                            _control.EnableDevice(iMachineNumber, false);
                            logger.Info(String.Format("Conectado al control con Nombre: [{0}], Direccion IP: [{1}] y Puerto: [{2}]", control.Nombre, control.DireccionIp, control.Puerto));

                            try
                            {
                                control.FechaUltimaConexion = DateTime.Now;
                                controlAccesoDao.SaveOrUpdate(control);
                            }
                            catch (Exception ex)
                            {
                                logger.Warn(String.Format("Error al actualizar la Fecha de Ultima Conexionc del Control con Nombre: [{0}], Direccion IP: [{1}] y Puerto: [{2}]. Codigo de Error: [{3}]", control.Nombre, control.DireccionIp, control.Puerto, idwErrorCode));
                                logger.Warn(ex);
                            }


                            if (_control.ReadGeneralLogData(iMachineNumber))
                            {
                                logger.Info(String.Format("Lectura de Datos Generales con EXITO control con Nombre: [{0}], Direccion IP: [{1}] y Puerto: [{2}]", control.Nombre, control.DireccionIp, control.Puerto));
                                while (_control.SSR_GetGeneralLogData(iMachineNumber, out sdwEnrollNumber, out idwVerifyMode,
                                                                      out idwInOutMode, out idwYear, out idwMonth, out idwDay, out idwHour, out idwMinute,
                                                                      out idwSecond, ref idwWorkcode))
                                {
                                    logger.Info(String.Format("Datos Obtenidos: CveControlAcceso: [{0}], sdwEnrollNumber: [{1}], idwVerifyMode: [{2}], idwInOutMode: [{3}], idwYear: [{4}], idwMonth: [{5}], idwDay: [{6}], idwHour: [{7}], idwMinute: [{8}], idwSecond: [{9}], idwWorkcode: [{10}]", control.CveControlAcceso, sdwEnrollNumber, idwVerifyMode, idwInOutMode, idwYear, idwMonth, idwDay, idwHour, idwMinute, idwSecond, idwWorkcode));
                                    ColectorMovimiento colector = new ColectorMovimiento(control.IdControl, control.CveControlAcceso, sdwEnrollNumber, idwVerifyMode, idwInOutMode, idwYear, idwMonth, idwDay, idwHour, idwMinute, idwSecond, idwWorkcode);
                                    ColectorMovimiento up       = colectorMovimientoDao.SaveOrUpdate(colector);
                                    colector = up;
                                }
                            }
                            else
                            {
                                _control.GetLastError(ref idwErrorCode);
                                if (idwErrorCode != 0)
                                {
                                    String strError = String.Format("ERROR de conexion al control con Nombre: [{0}], Direccion IP: [{1}] y Puerto: [{2}]. Codigo de Error [{3}]", control.Nombre, control.DireccionIp, control.Puerto, idwErrorCode);
                                    logger.Error(strError);

                                    try
                                    {
                                        ColectorMovimientoIncidencia coleMovIncidencia = new ColectorMovimientoIncidencia();
                                        coleMovIncidencia.ControlAcceso = control;
                                        coleMovIncidencia.Detalles      = strError;
                                        colectorMovimientoIncidenciaDao.Save(coleMovIncidencia);
                                    }
                                    catch (Exception ex)
                                    {
                                        logger.Warn(String.Format("No se pudo guardar la incidencia de coleccion de movimientos. Mensaje: [{0}]", ex.Message));
                                    }
                                }
                                else
                                {
                                    logger.Info(String.Format("OK. El control Reporta que NO existen movimientos. Datos de conexion son Nombre: [{0}], Direccion IP: [{1}] y Puerto: [{2}]. Codigo de Mensaje: [{3}]", control.Nombre, control.DireccionIp, control.Puerto, idwErrorCode));
                                }
                            }

                            // Limpiamos el log
                            if (_control.ClearGLog(iMachineNumber))
                            {
                                _control.RefreshData(iMachineNumber);
                            }
                            else
                            {
                                _control.GetLastError(ref idwErrorCode);
                                logger.Error(String.Format("Error en el Proceso de Limpiar el LOG del Control con Nombre: [{0}], Direccion IP: [{1}] y Puerto: [{2}]. Codigo de Error: [{3}]", control.Nombre, control.DireccionIp, control.Puerto, idwErrorCode));
                            }


                            _control.EnableDevice(iMachineNumber, true);
                            _control.Disconnect();
                        }
                        else
                        {
                            _control.GetLastError(ref idwErrorCode);

                            String strError = String.Format("Error en el Proceso de Conexion al control con Nombre: [{0}], Direccion IP: [{1}] y Puerto: [{2}]. Codigo de Error: [{3}]", control.Nombre, control.DireccionIp, control.Puerto, idwErrorCode);
                            logger.Error(strError);

                            try
                            {
                                ColectorMovimientoIncidencia coleMovIncidencia = new ColectorMovimientoIncidencia();
                                coleMovIncidencia.ControlAcceso = control;
                                coleMovIncidencia.Detalles      = strError;
                                colectorMovimientoIncidenciaDao.Save(coleMovIncidencia);
                            }
                            catch (Exception ex)
                            {
                                logger.Warn(String.Format("No se pudo guardar la incidencia de coleccion de movimientos. Mensaje: [{0}]", ex.Message));
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        String strError = String.Format("Error en el Proceso de Procesar Control con Nombre: [{0}], Direccion IP: [{1}] y Puerto: [{2}]. Codigo de Error: [{3}]", control.Nombre, control.DireccionIp, control.Puerto, idwErrorCode);
                        logger.Error(strError);
                        logger.Error(ex);

                        try
                        {
                            ColectorMovimientoIncidencia coleMovIncidencia = new ColectorMovimientoIncidencia();
                            coleMovIncidencia.ControlAcceso = control;
                            coleMovIncidencia.Detalles      = strError;
                            colectorMovimientoIncidenciaDao.Save(coleMovIncidencia);
                        }
                        catch (Exception except)
                        {
                            logger.Warn(String.Format("No se pudo guardar la incidencia de coleccion de movimientos. Mensaje: [{0}]", except.Message));
                        }
                    }
                }

                // Se inicia el purrun de la tabla de inicidencias
                List <ColectorMovimiento> listaColector = colectorMovimientoDao.GetListado();
                if (listaColector != null && listaColector.Count > 0)
                {
                    foreach (ColectorMovimiento movimiento in listaColector)
                    {
                        try
                        {
                            Empleado      empleado = empleadoDao.GetByNumeroEmpleado(Int32.Parse(movimiento.EnrollNumber));
                            ControlAcceso control  = controlAccesoDao.GetById(movimiento.CveControlAcceso);

                            DateTime fechaAlta       = DateTime.Now;
                            DateTime fechaIncidencia = new DateTime(movimiento.Year != null ? movimiento.Year.Value : fechaAlta.Year,
                                                                    movimiento.Month != null ? movimiento.Month.Value : fechaAlta.Month, movimiento.Day != null ? movimiento.Day.Value : fechaAlta.Day,
                                                                    movimiento.Hour != null ? movimiento.Hour.Value : fechaAlta.Hour, movimiento.Minute != null ? movimiento.Minute.Value : fechaAlta.Minute,
                                                                    movimiento.Second != null ? movimiento.Second.Value : fechaAlta.Second);


                            if (empleado == null)
                            {
                                String strError = String.Format("ADVERTENCIA: El Empleado con clave [{0}] no fue encontrado en la base de datos. Esta incidencia no se guardara", movimiento.EnrollNumber);
                                logger.Warn(strError);

                                try
                                {
                                    ColectorMovimientoIncidencia coleMovIncidencia = new ColectorMovimientoIncidencia();
                                    coleMovIncidencia.ControlAcceso = control;
                                    coleMovIncidencia.Detalles      = strError;
                                    coleMovIncidencia.CveEmpleado   = movimiento.EnrollNumber;
                                    colectorMovimientoIncidenciaDao.Save(coleMovIncidencia);
                                }
                                catch (Exception except)
                                {
                                    logger.Warn(String.Format("No se pudo guardar la incidencia de coleccion de movimientos. Mensaje: [{0}]", except.Message));
                                }
                            }
                            if (control == null)
                            {
                                logger.Warn(String.Format("ADVERTENCIA: El Control de Acceso con Clave: [{0}] no fue encontrado en la base de datos. Esta incidencia no se guardara", movimiento.CveControlAcceso));
                            }

                            if (empleado != null && control != null)
                            {
                                try
                                {
                                    Incidencia validacion = incidenciaDao.GetByEmpleadoControlFechaInOutMode(empleado, control, fechaIncidencia, movimiento.InOutMode.HasValue ? movimiento.InOutMode.Value : 0);

                                    if (empleado != null)
                                    {
                                        try
                                        {
                                            empleado.UltimaColeccion = String.Format("Fecha: [{0}] en el Control: [{1}]", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), control.Nombre);
                                            empleadoDao.SaveOrUpdate(empleado);
                                        }
                                        catch
                                        {
                                        }
                                    }

                                    if (validacion == null)
                                    {
                                        Incidencia incidencia = new Incidencia();
                                        incidencia.ControlAcceso       = control;
                                        incidencia.Empleado            = empleado;
                                        incidencia.EnviadoWs           = 0;
                                        incidencia.FechaAlta           = fechaAlta;
                                        incidencia.FechaHoraIncidencia = fechaIncidencia;
                                        incidencia.InOutMode           = movimiento.InOutMode;
                                        Incidencia up = incidenciaDao.SaveOrUpdate(incidencia);
                                        incidencia = up;
                                    }
                                    else
                                    {
                                        logger.Warn(String.Format("ADVERTENCIA: Esta incidencia ya estaba dada de alta con la clave [{0}]", validacion.CveIncidencia));
                                    }
                                }
                                catch (Exception ex)
                                {
                                    logger.Error(String.Format("Error: Al intentar guardar la incidencia con Control: [{0}], Empleado: [{1}], Fecha Hora [{2}]. Mensaje: [{3}]", control.Nombre, empleado.Nombre, fechaIncidencia, ex.Message));
                                    logger.Error(ex);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            logger.Error(String.Format("Error al momento de intentar procesar los colectores de movimiento. Mensaje: [{0}] ", ex.Message));
                            logger.Error(ex);
                        }
                    }
                }

                // Se borra la tabla del colector de movimientos
                if (listaColector != null && listaColector.Count > 0)
                {
                    foreach (ColectorMovimiento movimiento in listaColector)
                    {
                        try
                        {
                            colectorMovimientoDao.Delete(movimiento);
                        }
                        catch (Exception ex)
                        {
                            logger.Error(String.Format("Error al momento de intentar limpiar los colectores de movimiento. Mensaje: [{0}] ", ex.Message));
                            logger.Error(ex);
                        }
                    }
                }
            }
            else
            {
                logger.Info("La lista de controles de acceso a procesar está vacia o nula de controles de acceso activos en la base de datos.");
            }
        }
        protected void btnSubir_Click(object sender, EventArgs e)
        {
            if (!CargaArchivo.HasFile)
            {
                MostrarExcepcion(Constantes.MENSAJE_CAMPO_REQUERIDO_TITULO, "Es requerido subir un archivo");
                return;
            }

            String ext = System.IO.Path.GetExtension(CargaArchivo.PostedFile.FileName);

            log.Info(String.Format("El usuario: [{0}] ha cargado el archivo de excel [{1}] para su insercion masiva", UsuarioActual.Nombre, CargaArchivo.PostedFile.FileName));

            if (!ext.ToLower().Equals(Constantes.EXTENSION_EXCEL_97) && !ext.ToLower().Equals(Constantes.EXTENSION_EXCEL_2007))
            {
                MostrarExcepcion(Constantes.MENSAJE_CAMPO_REQUERIDO_TITULO, "Solo son permitidos los archivos de Excel");
                return;
            }

            CajaRegistro.Items.Clear();
            CajaRegistro.Items.Add(NuevoListItem("Iniciando Proceso", Constantes.TEXTO_BLANCO));

            try
            {
                IExcelDataReader excelReader = null;


                if (ext.ToLower().Equals(Constantes.EXTENSION_EXCEL_2007))
                {
                    CajaRegistro.Items.Add(NuevoListItem("Leyendo Archivo de Excel XLSX 2007", Constantes.TEXTO_BLANCO));
                    excelReader = ExcelReaderFactory.CreateOpenXmlReader(CargaArchivo.PostedFile.InputStream);
                }
                else
                {
                    if (ext.ToLower().Equals(Constantes.EXTENSION_EXCEL_97))
                    {
                        CajaRegistro.Items.Add(NuevoListItem("Leyendo Archivo de Excel XLS 97-2003", Constantes.TEXTO_BLANCO));
                        excelReader = ExcelReaderFactory.CreateBinaryReader(CargaArchivo.PostedFile.InputStream);
                    }
                }


                excelReader.IsFirstRowAsColumnNames = true;
                DataSet result = excelReader.AsDataSet();

                int i = 0;
                while (excelReader.Read())
                {
                    i++;
                    String nomina = excelReader.GetString(0);
                    String nombre = excelReader.GetString(1);
                    String plaza  = excelReader.GetString(2);

                    int     numeroNumina  = 0;
                    Boolean encontroError = false;

                    if (i == 1)
                    {
                        encontroError = true;
                    }

                    if (!Int32.TryParse(nomina, out numeroNumina) && !encontroError)
                    {
                        numeroNumina = 0;
                        CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}], la columna de Nomina no es numerica", i), Constantes.TEXTO_BLANCO));
                        encontroError = true;
                    }

                    if (!ValidarObjeto(nombre) && !encontroError)
                    {
                        CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}], la columna carece de nombre ", i), Constantes.TEXTO_BLANCO));
                        encontroError = true;
                    }
                    if (!ValidarObjeto(plaza) && !encontroError)
                    {
                        CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}], la columna carece de plaza", i), Constantes.TEXTO_BLANCO));
                        encontroError = true;
                    }
                    if (numeroNumina <= 0 && !encontroError)
                    {
                        CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}], la columna carece de numero nomina", i), Constantes.TEXTO_BLANCO));
                        encontroError = true;
                    }

                    if (!encontroError)
                    {
                        try
                        {
                            Empleado obj      = empleadoDao.GetByNumeroEmpleado(numeroNumina);
                            Plaza    objPlaza = plazaDao.GetByNombre(plaza);

                            if (obj != null)
                            {
                                CajaRegistro.Items.Add(NuevoListItem(String.Format("ADV FILA: [{0}], este numero de nomina ya existe, se actualizara el registro", i), Constantes.TEXTO_BLANCO));
                            }
                            if (objPlaza == null)
                            {
                                CajaRegistro.Items.Add(NuevoListItem(String.Format("ADV FILA: [{0}], la plaza [{1}] NO existe en la base de datos.", i, plaza), Constantes.TEXTO_BLANCO));
                            }
                            if (obj == null)
                            {
                                obj = new Empleado();
                                obj.Usuario_creado_por       = UsuarioActual;
                                obj.Usuario_cve_usuario_alta = UsuarioActual;
                            }
                            obj.Usuario_modificado_por = UsuarioActual;
                            obj.FechaModificacion      = DateTime.Now;
                            obj.Nombre     = nombre;
                            obj.NoEmpleado = numeroNumina;

                            if (objPlaza != null)
                            {
                                obj.Plaza = objPlaza;
                            }
                            empleadoDao.SaveOrUpdate(obj);
                            CajaRegistro.Items.Add(NuevoListItem(String.Format("OK FILA:  [{0}], registro guardado correctamente", i), Constantes.TEXTO_BLANCO));
                        }
                        catch (Exception ex)
                        {
                            log.Error(String.Format("Error al momento de intentar insertar un empleado importado de Excel. Mensaje: [{0}]", ex.Message));
                            CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}]. Error en el proceso. Detalles: [{1}]", i, ex.Message), Constantes.TEXTO_BLANCO));
                        }
                    }
                }

                CajaRegistro.Items.Add(NuevoListItem(String.Format("PROCESO OK: Se completaron: [{0}] registros", i), Constantes.TEXTO_BLANCO));
                excelReader.Close();
            }
            catch (Exception ex)
            {
                CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR: Error en el proceso. Detalles:  [{0}] ", ex.Message), Constantes.TEXTO_BLANCO));

                log.Error(String.Format("Error al momento de intentar importar la hoja de excel de Empleados. Mensaje  [{0}]", ex.Message));
                ManejarExcepcion(ex);
            }
        }
Example #4
0
        protected void BtnAceptar_Click(object sender, EventArgs e)
        {
            // Validamos que se haya seleccionado un control fuente
            if (!ValidarObjeto(txtPlantilla.SelectedValue))
            {
                MostrarExcepcion(Constantes.MENSAJE_CAMPO_REQUERIDO_TITULO, "Es requerido Seleccionar la plantilla fuente");
                return;
            }

            // Validamos que se haya seleccionado un control de destino
            if (!ValidarObjeto(txtControlDestino.SelectedValue))
            {
                MostrarExcepcion(Constantes.MENSAJE_CAMPO_REQUERIDO_TITULO, "Es requerido Seleccionar el Control de Acceso de destino");
                return;
            }

            // Validamos que el control de destino no sea el mismo que el seleccionado en la fuente
            if (txtControlDestino.SelectedValue.Equals(txtPlantilla.SelectedValue))
            {
                MostrarExcepcion(Constantes.MENSAJE_CAMPO_CON_ERROR_TITULO, "El Control de Acceso de Destino es el Mismo que el de la fuente de Datos");
            }

            // Obtenemos y validamos el control fuente
            ControlAcceso controlFuente = null;

            try
            {
                controlFuente = controlAccesoDao.GetById(Int32.Parse(txtPlantilla.SelectedValue));
            }
            catch (Exception ex)
            {
                log.Error(String.Format("Error en el Proceso Obtener Control Fuente. Mensaje: [{0}]", ex.Message));
                ManejarExcepcion(ex);
            }

            if (controlFuente == null)
            {
                MostrarExcepcion(Constantes.MENSAJE_CAMPO_CON_ERROR_TITULO, "El control fuente es nulo");
                return;
            }

            // Obtenemos y validamos el control de destino
            ControlAcceso controlDestino = null;

            try
            {
                controlDestino = controlAccesoDao.GetById(Int32.Parse(txtControlDestino.SelectedValue));
            }
            catch (Exception ex)
            {
                log.Error(String.Format("Error en el Proceso Obtener Control Destino. Mensaje: [{0}]", ex.Message));
                ManejarExcepcion(ex);
            }

            if (controlDestino == null)
            {
                MostrarExcepcion(Constantes.MENSAJE_CAMPO_CON_ERROR_TITULO, "El control de destino es nulo");
                return;
            }

            // Obtenemos y validamos la lista de plantillas a cargar
            List <DbDominio.Plantilla> listaPlantilla = null;

            try
            {
                listaPlantilla = plantillaDao.GetListado(null, controlFuente);
            }
            catch (Exception ex)
            {
                log.Error(String.Format("Error en el Proceso Obtener La plantilla desde el Control Fuente. Mensaje: [{0}]", ex.Message));
                ManejarExcepcion(ex);
            }

            if (listaPlantilla == null || listaPlantilla.Count == 0)
            {
                MostrarExcepcion(Constantes.MENSAJE_CAMPO_CON_ERROR_TITULO, "La plantilla seleccionada es nula o vacia");
                return;
            }


            // Al parecer todo va bien, iniciarmos el proceso
            int    idwErrorCode    = 0;
            string sdwEnrollNumber = Constantes.TEXTO_BLANCO;
            string sName           = Constantes.TEXTO_BLANCO;
            int    idwFingerIndex  = 0;
            string sTmpData        = Constantes.TEXTO_BLANCO;
            int    iPrivilege      = 0;
            string sPassword       = Constantes.TEXTO_BLANCO;
            bool   bEnabled        = false;
            int    iFlag           = 1;
            int    iUpdateFlag     = 1;
            int    iMachineNumber  = 1;

            try
            {
                log.Info(String.Format("Se Intentará conectar con el control de acceso con ID: [{0}]. El control tiene la direccion ip: [{1}] y el puerto: [{2}]", txtControlDestino.SelectedValue, controlDestino.DireccionIp, controlDestino.Puerto));

                CZKEMClass _control = new CZKEMClass();
                // _control.PullMode = 1;

                if (_control.Connect_Net(controlDestino.DireccionIp, Int32.Parse(controlDestino.Puerto.Value.ToString())))
                {
                    log.Info(String.Format("Se logro correctamente la conexion con el control con direccion ip: [{0}] y el puerto: [{1}]", controlDestino.DireccionIp, controlDestino.Puerto));

                    _control.RegEvent(iMachineNumber, 65535);
                    _control.EnableDevice(iMachineNumber, false);

                    if (_control.BeginBatchUpdate(iMachineNumber, iUpdateFlag))//create memory space for batching data
                    {
                        log.Info(String.Format("Inicia el Proceso BeginBatchUpdate Con ImachineNumber : [{0}] iUpdateFlag: [{1}]", iMachineNumber, iUpdateFlag));

                        string sLastEnrollNumber = "";//the former enrollnumber you have upload(define original value as 0)

                        foreach (DbDominio.Plantilla planti in listaPlantilla)
                        {
                            sdwEnrollNumber = planti.Enrollnumber;
                            sName           = planti.Nombre;
                            idwFingerIndex  = planti.Fingerindex != null ? planti.Fingerindex.Value : 0;
                            sTmpData        = planti.Tmpdata;
                            iPrivilege      = planti.Privilege != null ? planti.Privilege.Value : 0;
                            sPassword       = planti.Password;
                            bEnabled        = planti.Enabled != null ? planti.Enabled.Value : false;
                            iFlag           = planti.Flag != null ? planti.Flag.Value : 1;

                            log.Info(String.Format("Se Carga la Siguiente sdwEnrollNumber: [{0}] sName: [{1}], idwFingerIndex: [{2}], sTmpData: [{3}], iPrivilege : [{4}], sPassword : [{5}], bEnabled : [{6}], iFlag: [{7}]", sdwEnrollNumber, sName, idwFingerIndex, sTmpData, iPrivilege, sPassword, bEnabled, iFlag));

                            if (sdwEnrollNumber != sLastEnrollNumber)                                                                  //identify whether the user information(except fingerprint templates) has been uploaded
                            {
                                if (_control.SSR_SetUserInfo(iMachineNumber, sdwEnrollNumber, sName, sPassword, iPrivilege, bEnabled)) //upload user information to the memory
                                {
                                    log.Info(String.Format("Se Completa El ProcesoS SR_SetUserInfo con la siguiente Informacion_ iMachineNumber [{0}] sdwEnrollNumber: [{1}] sName: [{2}], sPassword: [{3}], iPrivilege : [{4}], bEnabled: [{5}]", iMachineNumber, sdwEnrollNumber, sName, sPassword, iPrivilege, bEnabled));

                                    _control.SetUserTmpExStr(iMachineNumber, sdwEnrollNumber, idwFingerIndex, iFlag, sTmpData);//upload templates information to the memory

                                    log.Info(String.Format("Se Completa El Proceso SetUserTmpExStr con la siguiente Informacion_ iMachineNumber [{0}] sdwEnrollNumber: [{1}] idwFingerIndex: [{2}], iFlag: [{3}], sTmpData : [{4}]", iMachineNumber, sdwEnrollNumber, idwFingerIndex, iFlag, sTmpData));
                                }
                                else
                                {
                                    _control.GetLastError(ref idwErrorCode);
                                    _control.EnableDevice(iMachineNumber, true);

                                    log.Error(String.Format("Error en el Proceso Distribuir  La plantilla Al Control de Destino. Codigo de Error: [{0}]", idwErrorCode));
                                    MostrarExcepcion("Error en el proceso", String.Format("Error en el Proceso Distribuir  La plantilla Al Control de Destino. Codigo de Error: [{0}]", idwErrorCode));
                                    return;
                                }
                            }
                            else
                            {
                                _control.SetUserTmpExStr(iMachineNumber, sdwEnrollNumber, idwFingerIndex, iFlag, sTmpData);
                                log.Info(String.Format("Se Completa El Proceso SetUserTmpExStr (sdwEnrollNumber != sLastEnrollNumber) con la siguiente Informacion_ iMachineNumber [{0}] sdwEnrollNumber: [{1}] idwFingerIndex: [{2}], iFlag: [{3}], sTmpData : [{4}]", iMachineNumber, sdwEnrollNumber, idwFingerIndex, iFlag, sTmpData));
                            }
                            sLastEnrollNumber = sdwEnrollNumber;

                            try
                            {
                                Empleado empleado = empleadoDao.GetByNumeroEmpleado(Int32.Parse(sdwEnrollNumber));
                                if (empleado != null && controlDestino != null)
                                {
                                    EmpleadoControlAcceso eca = empleadoControlAccesoDao.GetByControlAcceso(controlDestino, empleado);
                                    if (eca == null)
                                    {
                                        eca = new EmpleadoControlAcceso();
                                    }
                                    eca.ControlAcceso = controlDestino;
                                    eca.Empleado      = empleado;
                                    empleadoControlAccesoDao.SaveOrUpdate(eca);
                                }
                            }
                            catch (Exception ex)
                            {
                                log.Error(String.Format("Error en el Proceso Guardar Empleado Control de Acceso en la base de Datos. Mensaje: [{0}]", ex.Message));
                                log.Error(ex);
                            }
                        }
                    }
                    _control.BatchUpdate(iMachineNumber); //upload all the information in the memory
                    _control.RefreshData(iMachineNumber); //the data in the device should be refreshed
                    _control.EnableDevice(iMachineNumber, true);
                    _control.Disconnect();
                    MostrarExito("Proceso Completo", "Se completo el proceso exitosamente");
                }
                else
                {
                    _control.GetLastError(ref idwErrorCode);
                    log.Error(String.Format("Error en el Proceso de Conexion al control con ID [{0}], Direccion IP [{1}] y Puerto [{2}]. Codigo de Error [{3}]", controlDestino.IdControl, controlDestino.DireccionIp, controlDestino.Puerto, idwErrorCode));
                    MostrarExcepcion("Conexion Invalida", String.Format("Error en el Proceso de Conexion con el Control con Direccion IP: {0} y Puerto {1}", controlDestino.DireccionIp, controlDestino.Puerto));
                }
            }

            catch (Exception ex)
            {
                log.Error(String.Format("Error en el Proceso de Conexion con el control. Mensaje: [{0}]", ex.Message));
                ManejarExcepcion(ex);
            }
        }
        protected void btnSubir_Click(object sender, EventArgs e)
        {
            if (!CargaArchivo.HasFile)
            {
                MostrarExcepcion(Constantes.MENSAJE_CAMPO_REQUERIDO_TITULO, "Es requerido subir un archivo");
                return;
            }

            String ext = System.IO.Path.GetExtension(CargaArchivo.PostedFile.FileName);

            log.Info(String.Format("El usuario: [{0}] ha cargado el archivo de excel [{1}] para su insercion masiva", UsuarioActual.Nombre, CargaArchivo.PostedFile.FileName));

            if (!ext.ToLower().Equals(Constantes.EXTENSION_EXCEL_97) && !ext.ToLower().Equals(Constantes.EXTENSION_EXCEL_2007))
            {
                MostrarExcepcion(Constantes.MENSAJE_CAMPO_REQUERIDO_TITULO, "Solo son permitidos los archivos de Excel");
                return;
            }

            CajaRegistro.Items.Clear();
            CajaRegistro.Items.Add(NuevoListItem("Iniciando Proceso", Constantes.TEXTO_BLANCO));

            try
            {
                IExcelDataReader excelReader = null;


                if (ext.ToLower().Equals(Constantes.EXTENSION_EXCEL_2007))
                {
                    CajaRegistro.Items.Add(NuevoListItem("Leyendo Archivo de Excel XLSX 2007", Constantes.TEXTO_BLANCO));
                    excelReader = ExcelReaderFactory.CreateOpenXmlReader(CargaArchivo.PostedFile.InputStream);
                }
                else
                {
                    if (ext.ToLower().Equals(Constantes.EXTENSION_EXCEL_97))
                    {
                        CajaRegistro.Items.Add(NuevoListItem("Leyendo Archivo de Excel XLS 97-2003", Constantes.TEXTO_BLANCO));
                        excelReader = ExcelReaderFactory.CreateBinaryReader(CargaArchivo.PostedFile.InputStream);
                    }
                }


                excelReader.IsFirstRowAsColumnNames = true;
                DataSet result = excelReader.AsDataSet();

                int i = 0;
                while (excelReader.Read())
                {
                    i++;
                    String nomina   = excelReader.GetString(0);
                    String time     = excelReader.GetString(1);
                    String deviceid = excelReader.GetString(2);
                    String status   = excelReader.GetString(3);

                    int     numeroNumina  = 0;
                    Boolean encontroError = false;

                    DateTime fechaInicidencia;

                    if (i == 1)
                    {
                        encontroError = true;
                    }

                    if (!Int32.TryParse(nomina, out numeroNumina) && !encontroError)
                    {
                        numeroNumina = 0;
                        CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}], la columna de Nomina no es numerica", i), Constantes.TEXTO_BLANCO));
                        encontroError = true;
                    }

                    if (numeroNumina <= 0 && !encontroError)
                    {
                        CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}], la columna carece de numero nomina", i), Constantes.TEXTO_BLANCO));
                        encontroError = true;
                    }


                    Empleado emp = encontroError ? null : empleadoDao.GetByNumeroEmpleado(Int32.Parse(nomina));
                    if (emp == null && !encontroError)
                    {
                        CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}], este empleado no existe en la base de datos", i), Constantes.TEXTO_BLANCO));
                        encontroError = true;
                    }

                    ControlAcceso ctrl = encontroError ? null : controlAccesoDao.GetByIdControl(Int32.Parse(deviceid));
                    if (ctrl == null && !encontroError)
                    {
                        CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}], este control de acceso no existe en la base de datos", i), Constantes.TEXTO_BLANCO));
                        encontroError = true;
                    }

                    if (!DateTime.TryParse(time, out fechaInicidencia) && !encontroError)
                    {
                        CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}], esta fecha no puede ser interpretada correctamente", i), Constantes.TEXTO_BLANCO));
                        encontroError = true;
                    }


                    if (!encontroError)
                    {
                        try
                        {
                            Incidencia obj = incidenciaDao.GetByEmpleadoFecha(emp, fechaInicidencia);

                            if (obj != null)
                            {
                                CajaRegistro.Items.Add(NuevoListItem(String.Format("ADV FILA: [{0}], esta incidencia ya existe, se actualizara el registro", i), Constantes.TEXTO_BLANCO));
                            }
                            if (obj == null)
                            {
                                obj = new Incidencia();
                            }

                            obj.ControlAcceso       = ctrl;
                            obj.Empleado            = emp;
                            obj.EnviadoWs           = 0;
                            obj.FechaAlta           = DateTime.Now;
                            obj.FechaHoraIncidencia = fechaInicidencia;
                            obj.InOutMode           = Int32.Parse(status);


                            incidenciaDao.SaveOrUpdate(obj);
                            CajaRegistro.Items.Add(NuevoListItem(String.Format("OK FILA: [{0}], registro guardado correctamente", i), Constantes.TEXTO_BLANCO));
                        }
                        catch (Exception ex)
                        {
                            log.Error(String.Format("Error al momento de intentar insertar una incidencia importada de Excel. Mensaje: [{0}]", ex.Message));
                            CajaRegistro.Items.Add(NuevoListItem(String.Format("ERROR FILA: [{0}],  error en el proceso. Mensaje: [{1}]", i, ex.Message), Constantes.TEXTO_BLANCO));
                        }
                    }
                }

                CajaRegistro.Items.Add(NuevoListItem(String.Format("PROCESO OK: Se completaron: [{0}] registros", i), Constantes.TEXTO_BLANCO));
                excelReader.Close();
            }
            catch (Exception ex)
            {
                CajaRegistro.Items.Add(NuevoListItem(String.Format("Error en el proceso. Detalles: [{0}] ", ex.Message), Constantes.TEXTO_BLANCO));

                log.Error(String.Format("Error al momento de intentar importar la hoja de excel de Asistencia. Mensaje [{0}]", ex.Message));
                ManejarExcepcion(ex);
            }
        }