public void CompararHuellaImputado()
        {
            ImagenImputado   = new Imagenes().getImagenPerson();
            ImputadoEntrante = new List <InternoVisitaLegal>();
            var bytesHuella = FingerPrintData != null?FeatureExtraction.CreateFmdFromFid(FingerPrintData, Constants.Formats.Fmd.ANSI).Data.Bytes : null;

            var MensajeResultado = enumMensajeResultadoComparacion.HUELLA_VACIA;

            if (bytesHuella == null)
            {
                Application.Current.Dispatcher.Invoke((Action)(delegate()
                {
                    CambiarMensaje(MensajeResultado);
                }));
            }
            else
            {
                MensajeResultado = enumMensajeResultadoComparacion.PROCESANDO;
                Application.Current.Dispatcher.Invoke((Action)(delegate
                {
                    CambiarMensaje(MensajeResultado);
                }));

                var doIdentify = Comparison.Identify(Importer.ImportFmd(bytesHuella, Constants.Formats.Fmd.ANSI, Constants.Formats.Fmd.ANSI).Data, 0, HuellasImputadosVisitas.Where(w => w.FMD != null && w.tipo_biometrico == SelectedFinger).Select(s => s.FMD), (0x7fffffff / 100000), 10);
                var result     = new List <object>();

                if (doIdentify.ResultCode != Constants.ResultCode.DP_SUCCESS)
                {
                    if (HuellasImputadosVisitas.Count == 0)
                    {
                        MensajeResultado = enumMensajeResultadoComparacion.NO_ENCONTRADO;
                    }
                    else
                    {
                        switch (doIdentify.ResultCode)
                        {
                        case Constants.ResultCode.DP_DEVICE_BUSY:
                            break;

                        case Constants.ResultCode.DP_DEVICE_FAILURE:
                            break;

                        case Constants.ResultCode.DP_ENROLLMENT_INVALID_SET:
                            break;

                        case Constants.ResultCode.DP_ENROLLMENT_IN_PROGRESS:
                            break;

                        case Constants.ResultCode.DP_ENROLLMENT_NOT_READY:
                            break;

                        case Constants.ResultCode.DP_ENROLLMENT_NOT_STARTED:
                            break;

                        case Constants.ResultCode.DP_FAILURE:
                            break;

                        case Constants.ResultCode.DP_INVALID_DEVICE:
                            break;

                        case Constants.ResultCode.DP_INVALID_FID:
                            break;

                        case Constants.ResultCode.DP_INVALID_FMD:
                            break;

                        case Constants.ResultCode.DP_INVALID_PARAMETER:
                            break;

                        case Constants.ResultCode.DP_MORE_DATA:
                            break;

                        case Constants.ResultCode.DP_NOT_IMPLEMENTED:
                            break;

                        case Constants.ResultCode.DP_NO_DATA:
                            break;

                        case Constants.ResultCode.DP_TOO_SMALL_AREA:
                            break;

                        case Constants.ResultCode.DP_VERSION_INCOMPATIBILITY:
                            break;

                        default:
                            break;
                        }
                    }
                }
                else
                {
                    if (doIdentify.Indexes.Count() > 0)
                    {
                        foreach (var resultado in doIdentify.Indexes.ToList())
                        {
                            result.Add(HuellasImputadosVisitas[resultado.FirstOrDefault()].IMPUTADO);
                        }
                    }
                    if (result.Count > 0)
                    {
                        if (result.Count == 1)
                        {
                            try
                            {
                                var   imputado         = ((cHuellasImputado)result.FirstOrDefault());
                                var   ultimo_ingreso   = new cIngreso().ObtenerUltimoIngreso(imputado.ID_CENTRO, imputado.ID_ANIO, imputado.ID_IMPUTADO);
                                var   ultima_ubicacion = new cIngresoUbicacion().ObtenerUltimaUbicacion(imputado.ID_ANIO, imputado.ID_CENTRO, (int)imputado.ID_IMPUTADO, ultimo_ingreso.ID_INGRESO);
                                var   LOCUTORIOS       = Parametro.UBICACION_VISITA_ACTUARIO;
                                var   SALA_ABOGADOS    = Parametro.UBICACION_VISITA_ABOGADO;
                                short SIN_AREA         = 0;
                                if (ultima_ubicacion != null)
                                {
                                    //if (ultima_ubicacion.ESTATUS == (short)enumUbicacion.EN_TRANSITO && (ultima_ubicacion.ID_AREA == LOCUTORIOS || ultima_ubicacion.ID_AREA == SALA_ABOGADOS))
                                    //{
                                    var aduana_ingreso          = new cAduanaIngreso();
                                    var consulta_aduana_ingreso = aduana_ingreso.ObtenerAduanaIngresoSinNotificacion(imputado.ID_CENTRO, imputado.ID_ANIO, imputado.ID_IMPUTADO, ultimo_ingreso.ID_INGRESO, Fechas.GetFechaDateServer).FirstOrDefault();
                                    if (consulta_aduana_ingreso != null)
                                    {
                                        new cAduanaIngreso().CambiarEstadoVisitaInterno(new INGRESO_UBICACION()
                                        {
                                            ID_CENTRO      = consulta_aduana_ingreso.ID_CENTRO,
                                            ID_ANIO        = consulta_aduana_ingreso.ID_ANIO,
                                            ID_IMPUTADO    = consulta_aduana_ingreso.ID_IMPUTADO,
                                            ID_INGRESO     = consulta_aduana_ingreso.ID_INGRESO,
                                            ID_CONSEC      = new cIngresoUbicacion().ObtenerConsecutivo <int>(imputado.ID_CENTRO, imputado.ID_ANIO, imputado.ID_IMPUTADO, ultimo_ingreso.ID_INGRESO),
                                            ID_AREA        = consulta_aduana_ingreso.ADUANA.ID_AREA != null ? (consulta_aduana_ingreso.ADUANA.ID_AREA == SALA_ABOGADOS ? SALA_ABOGADOS : LOCUTORIOS) : SIN_AREA,//ultima_ubicacion.ID_AREA == LOCUTORIOS ? LOCUTORIOS : SALA_ABOGADOS,
                                            MOVIMIENTO_FEC = Fechas.GetFechaDateServer,
                                            ACTIVIDAD      = VISITA_LEGAL,
                                            ESTATUS        = (short)enumUbicacion.ACTIVIDAD
                                        }, new ADUANA_INGRESO()
                                        {
                                            ID_ADUANA          = consulta_aduana_ingreso.ID_ADUANA,
                                            ID_CENTRO          = consulta_aduana_ingreso.ID_CENTRO,
                                            ID_ANIO            = consulta_aduana_ingreso.ID_ANIO,
                                            ID_IMPUTADO        = consulta_aduana_ingreso.ID_IMPUTADO,
                                            ID_INGRESO         = consulta_aduana_ingreso.ID_INGRESO,
                                            INTERNO_NOTIFICADO = INTERNO_NOTIFICADO
                                        });
                                        var imputado_entrante = new List <InternoVisitaLegal>();
                                        imputado_entrante.Add(new InternoVisitaLegal()
                                        {
                                            ID_CENTRO   = imputado.ID_CENTRO,
                                            ID_ANIO     = imputado.ID_ANIO,
                                            ID_IMPUTADO = (short)imputado.ID_IMPUTADO,
                                            PATERNO     = ultimo_ingreso.IMPUTADO.PATERNO.TrimEnd(),
                                            MATERNO     = ultimo_ingreso.IMPUTADO.MATERNO.TrimEnd(),
                                            NOMBRE      = ultimo_ingreso.IMPUTADO.NOMBRE.TrimEnd(),
                                            PERMITIR    = true,
                                            HABILITAR   = true
                                        });
                                        ImputadoEntrante = imputado_entrante;
                                        SelectedImputado = ImputadoEntrante.FirstOrDefault();
                                        var huella = HuellasImputadosVisitas.Where(w =>
                                                                                   w.IMPUTADO.ID_CENTRO == SelectedImputado.ID_CENTRO &&
                                                                                   w.IMPUTADO.ID_ANIO == SelectedImputado.ID_ANIO &&
                                                                                   w.IMPUTADO.ID_IMPUTADO == SelectedImputado.ID_IMPUTADO).FirstOrDefault();
                                        HuellasImputadosVisitas.Remove(huella);
                                        var placeholder      = new Imagenes().getImagenPerson();
                                        var foto_seguimiento = consulta_aduana_ingreso.INGRESO.INGRESO_BIOMETRICO != null?consulta_aduana_ingreso.INGRESO.INGRESO_BIOMETRICO.Where(w =>
                                                                                                                                                                                   w.BIOMETRICO_TIPO.ID_TIPO_BIOMETRICO == (short)enumTipoBiometrico.FOTO_FRENTE_SEGUIMIENTO).FirstOrDefault() : null;

                                        var foto_registro = consulta_aduana_ingreso.INGRESO.INGRESO_BIOMETRICO != null?consulta_aduana_ingreso.INGRESO.INGRESO_BIOMETRICO.Where(w =>
                                                                                                                                                                                w.BIOMETRICO_TIPO.ID_TIPO_BIOMETRICO == (short)enumTipoBiometrico.FOTO_FRENTE_REGISTRO).FirstOrDefault() : null;

                                        ImagenImputado   = foto_seguimiento != null ? foto_seguimiento.BIOMETRICO : (foto_registro != null ? foto_registro.BIOMETRICO : placeholder);
                                        MensajeResultado = enumMensajeResultadoComparacion.ENCONTRADO;
                                    }
                                    else
                                    {
                                        MensajeResultado = enumMensajeResultadoComparacion.NO_ENCONTRADO;
                                    }
                                    //}
                                    //else
                                    //{
                                    //    MensajeResultado = enumMensajeResultadoComparacion.NO_ENCONTRADO;
                                    //}
                                }
                                else
                                {
                                    MensajeResultado = enumMensajeResultadoComparacion.NO_ENCONTRADO;
                                }
                            }
                            catch (Exception ex)
                            {
                                throw new ApplicationException(ex.Message);
                            }
                        }
                        else
                        {
                            MensajeResultado = enumMensajeResultadoComparacion.COINCIDENCIAS;
                        }
                    }
                    else
                    {
                        MensajeResultado = enumMensajeResultadoComparacion.NO_ENCONTRADO;
                    }
                }
            }
            Application.Current.Dispatcher.Invoke((Action)(delegate()
            {
                CambiarMensaje(MensajeResultado);
            }));
        }
        public void ClickSwitch(Object obj)
        {
            switch (obj.ToString())
            {
            case "0":
                if (NIPBuscar.Length < 13)
                {
                    NIPBuscar += "0";
                }
                break;

            case "1":
                if (NIPBuscar.Length < 13)
                {
                    NIPBuscar += "1";
                }
                break;

            case "2":
                if (NIPBuscar.Length < 13)
                {
                    NIPBuscar += "2";
                }
                break;

            case "3":
                if (NIPBuscar.Length < 13)
                {
                    NIPBuscar += "3";
                }
                break;

            case "4":
                if (NIPBuscar.Length < 13)
                {
                    NIPBuscar += "4";
                }
                break;

            case "5":
                if (NIPBuscar.Length < 13)
                {
                    NIPBuscar += "5";
                }
                break;

            case "6":
                if (NIPBuscar.Length < 13)
                {
                    NIPBuscar += "6";
                }
                break;

            case "7":
                if (NIPBuscar.Length < 13)
                {
                    NIPBuscar += "7";
                }
                break;

            case "8":
                if (NIPBuscar.Length < 13)
                {
                    NIPBuscar += "8";
                }
                break;

            case "9":
                if (NIPBuscar.Length < 13)
                {
                    NIPBuscar += "9";
                }
                break;

            case "backspace":
                if (NIPBuscar.Length > 0)
                {
                    NIPBuscar = NIPBuscar.Substring(0, NIPBuscar.Length - 1);
                }
                break;

            case "limpiarNIP":
                NIPBuscar = "";
                break;

            case "onBuscarPorNIP":
                var   imputado         = new cImputado().ObtenerPorNIP(NIPBuscar);
                var   MensajeResultado = enumMensajeResultadoComparacion.NO_ENCONTRADO;
                var   LOCUTORIOS       = Parametro.UBICACION_VISITA_ACTUARIO;
                var   SALA_ABOGADOS    = Parametro.UBICACION_VISITA_ABOGADO;
                short SIN_AREA         = 0;
                if (imputado != null)
                {
                    try
                    {
                        var ultimo_ingreso   = new cIngreso().ObtenerUltimoIngreso(imputado.ID_CENTRO, imputado.ID_ANIO, imputado.ID_IMPUTADO);
                        var ultima_ubicacion = new cIngresoUbicacion().ObtenerUltimaUbicacion(imputado.ID_ANIO, imputado.ID_CENTRO, (int)imputado.ID_IMPUTADO, ultimo_ingreso.ID_INGRESO);
                        //if (ultima_ubicacion.ESTATUS == (short)enumUbicacion.EN_TRANSITO && (ultima_ubicacion.ID_AREA == LOCUTORIOS || ultima_ubicacion.ID_AREA == SALA_ABOGADOS))
                        //{
                        var aduana_ingreso          = new cAduanaIngreso();
                        var consulta_aduana_ingreso = aduana_ingreso.ObtenerAduanaIngresoSinNotificacion(imputado.ID_CENTRO, imputado.ID_ANIO, imputado.ID_IMPUTADO, ultimo_ingreso.ID_INGRESO, Fechas.GetFechaDateServer).FirstOrDefault();
                        if (consulta_aduana_ingreso != null && ultimo_ingreso.ID_UB_CENTRO.HasValue && ultimo_ingreso.ID_UB_CENTRO.Value == GlobalVar.gCentro)
                        {
                            new cAduanaIngreso().CambiarEstadoVisitaInterno(new INGRESO_UBICACION()
                            {
                                ID_CENTRO      = consulta_aduana_ingreso.ID_CENTRO,
                                ID_ANIO        = consulta_aduana_ingreso.ID_ANIO,
                                ID_IMPUTADO    = consulta_aduana_ingreso.ID_IMPUTADO,
                                ID_INGRESO     = consulta_aduana_ingreso.ID_INGRESO,
                                ID_CONSEC      = new cIngresoUbicacion().ObtenerConsecutivo <int>(imputado.ID_CENTRO, imputado.ID_ANIO, imputado.ID_IMPUTADO, ultimo_ingreso.ID_INGRESO),
                                ID_AREA        = consulta_aduana_ingreso.ADUANA.ID_AREA != null ? (consulta_aduana_ingreso.ADUANA.ID_AREA == SALA_ABOGADOS ? SALA_ABOGADOS : LOCUTORIOS) : SIN_AREA,//ultima_ubicacion.ID_AREA == LOCUTORIOS ? LOCUTORIOS : SALA_ABOGADOS,
                                MOVIMIENTO_FEC = Fechas.GetFechaDateServer,
                                ACTIVIDAD      = VISITA_LEGAL,
                                ESTATUS        = (short)enumUbicacion.ACTIVIDAD
                            }, new ADUANA_INGRESO()
                            {
                                ID_ADUANA          = consulta_aduana_ingreso.ID_ADUANA,
                                ID_CENTRO          = consulta_aduana_ingreso.ID_CENTRO,
                                ID_ANIO            = consulta_aduana_ingreso.ID_ANIO,
                                ID_IMPUTADO        = consulta_aduana_ingreso.ID_IMPUTADO,
                                ID_INGRESO         = consulta_aduana_ingreso.ID_INGRESO,
                                INTERNO_NOTIFICADO = INTERNO_NOTIFICADO
                            });

                            var imputado_entrante = new List <InternoVisitaLegal>();
                            imputado_entrante.Add(new InternoVisitaLegal()
                            {
                                ID_CENTRO   = imputado.ID_CENTRO,
                                ID_ANIO     = imputado.ID_ANIO,
                                ID_IMPUTADO = (short)imputado.ID_IMPUTADO,
                                PATERNO     = ultimo_ingreso.IMPUTADO.PATERNO.TrimEnd(),
                                MATERNO     = ultimo_ingreso.IMPUTADO.MATERNO.TrimEnd(),
                                NOMBRE      = ultimo_ingreso.IMPUTADO.NOMBRE.TrimEnd(),
                                PERMITIR    = true,
                                HABILITAR   = true
                            });
                            ImputadoEntrante = imputado_entrante;
                            SelectedImputado = ImputadoEntrante.FirstOrDefault();
                            var huella = HuellasImputadosVisitas.Where(w =>
                                                                       w.IMPUTADO.ID_CENTRO == SelectedImputado.ID_CENTRO &&
                                                                       w.IMPUTADO.ID_ANIO == SelectedImputado.ID_ANIO &&
                                                                       w.IMPUTADO.ID_IMPUTADO == SelectedImputado.ID_IMPUTADO).FirstOrDefault();
                            HuellasImputadosVisitas.Remove(huella);
                            var placeholder      = new Imagenes().getImagenPerson();
                            var foto_seguimiento = consulta_aduana_ingreso.INGRESO.INGRESO_BIOMETRICO != null?consulta_aduana_ingreso.INGRESO.INGRESO_BIOMETRICO.Where(w =>
                                                                                                                                                                       w.BIOMETRICO_TIPO.ID_TIPO_BIOMETRICO == (short)enumTipoBiometrico.FOTO_FRENTE_SEGUIMIENTO).FirstOrDefault() : null;

                            var foto_registro = consulta_aduana_ingreso.INGRESO.INGRESO_BIOMETRICO != null?consulta_aduana_ingreso.INGRESO.INGRESO_BIOMETRICO.Where(w =>
                                                                                                                                                                    w.BIOMETRICO_TIPO.ID_TIPO_BIOMETRICO == (short)enumTipoBiometrico.FOTO_FRENTE_REGISTRO).FirstOrDefault() : null;

                            ImagenImputado   = foto_seguimiento != null ? foto_seguimiento.BIOMETRICO : (foto_registro != null ? foto_registro.BIOMETRICO : placeholder);
                            MensajeResultado = enumMensajeResultadoComparacion.ENCONTRADO;
                        }
                        else
                        {
                            MensajeResultado = enumMensajeResultadoComparacion.NO_ENCONTRADO;
                        }
                        //}
                        //else
                        //{
                        //    MensajeResultado = enumMensajeResultadoComparacion.NO_ENCONTRADO;
                        //}
                        CambiarMensajeNIP(MensajeResultado);
                    }
                    catch (Exception ex)
                    {
                        throw new ApplicationException(ex.Message);
                    }
                }
                else
                {
                    MensajeResultado = enumMensajeResultadoComparacion.NO_ENCONTRADO;
                }
                break;

            case "OpenCloseFlyout":
                if (CapturaNIPVisible)
                {
                    CapturaNIPVisible = false;
                }

                else
                {
                    CapturaNIPVisible = true;
                }
                break;

            case "PermitirEntradaVisita":
                if (!SelectedImputado.PERMITIR)
                {
                    IncidenciaRevertirVisitaLegalVisible = true;
                }
                break;

            case "CapturarIncidenciaRevertirUltimoMovimiento":
                ValidacionNIP();
                if (!base.HasErrors)
                {
                    var imputado_validacion = new cImputado().ObtenerPorNIP(IncidenciaNIP);
                    ValidacionNIPInexistente(imputado_validacion);
                    if (!base.HasErrors)
                    {
                        ValidacionImputadoActivo(imputado_validacion);
                        if (!base.HasErrors)
                        {
                            try
                            {
                                RevertirUltimoMovimiento();
                                var huella = new cIngreso().ObtenerUltimoIngreso(SelectedImputado.ID_CENTRO, SelectedImputado.ID_ANIO, SelectedImputado.ID_IMPUTADO).
                                             IMPUTADO.IMPUTADO_BIOMETRICO.Where(wB =>
                                                                                wB.ID_FORMATO == (short)enumTipoFormato.FMTO_DP && wB.CALIDAD > 0 &&
                                                                                wB.BIOMETRICO_TIPO.ID_TIPO_BIOMETRICO == (short)SelectedFinger && wB.BIOMETRICO != null).AsEnumerable().Select(s =>
                                                                                                                                                                                               new Imputado_Huella
                                {
                                    IMPUTADO = new cHuellasImputado {
                                        ID_ANIO = s.ID_ANIO, ID_CENTRO = s.ID_CENTRO, ID_IMPUTADO = s.ID_IMPUTADO
                                    },
                                    FMD             = Importer.ImportFmd(s.BIOMETRICO, Constants.Formats.Fmd.ANSI, Constants.Formats.Fmd.ANSI).Data,
                                    tipo_biometrico = (enumTipoBiometrico)s.BIOMETRICO_TIPO.ID_TIPO_BIOMETRICO
                                }).FirstOrDefault();
                                if (huella != null)
                                {
                                    HuellasImputadosVisitas.Add(huella);
                                }
                                var imputado_entrante_revertir_ultimo_movimiento = new List <InternoVisitaLegal>();
                                imputado_entrante_revertir_ultimo_movimiento.Add(new InternoVisitaLegal()
                                {
                                    ID_CENTRO   = SelectedImputado.ID_CENTRO,
                                    ID_ANIO     = SelectedImputado.ID_ANIO,
                                    ID_IMPUTADO = SelectedImputado.ID_IMPUTADO,
                                    PATERNO     = SelectedImputado.NOMBRE,
                                    MATERNO     = SelectedImputado.PATERNO,
                                    NOMBRE      = SelectedImputado.MATERNO,
                                    PERMITIR    = false,
                                    HABILITAR   = false
                                });
                                TextoIncidenciaFalsoPositivo         = "SIN OBSERVACIONES";
                                ImputadoEntrante                     = imputado_entrante_revertir_ultimo_movimiento;
                                SelectedImputado                     = ImputadoEntrante.FirstOrDefault();
                                IncidenciaRevertirVisitaLegalVisible = false;
                            }
                            catch (Exception ex)
                            {
                                throw new ApplicationException(ex.Message);
                            }
                        }
                    }
                }


                break;

            case "CapturarIncidenciaRevertirVisitaLegal":
                ValidacionNIP();
                if (!base.HasErrors)
                {
                    var imputado_validacion = new cImputado().ObtenerPorNIP(incidenciaNIP);
                    ValidacionNIPInexistente(imputado_validacion);
                    if (!base.HasErrors)
                    {
                        ValidacionImputadoActivo(imputado_validacion);
                        if (!base.HasErrors)
                        {
                            try
                            {
                                RevertirVisitaLegal();
                                var huella = new cIngreso().ObtenerUltimoIngreso(SelectedImputado.ID_CENTRO, SelectedImputado.ID_ANIO, SelectedImputado.ID_IMPUTADO).
                                             IMPUTADO.IMPUTADO_BIOMETRICO.Where(wB =>
                                                                                wB.ID_FORMATO == (short)enumTipoFormato.FMTO_DP && wB.CALIDAD > 0 &&
                                                                                wB.BIOMETRICO_TIPO.ID_TIPO_BIOMETRICO == (short)SelectedFinger && wB.BIOMETRICO != null).AsEnumerable().Select(s =>
                                                                                                                                                                                               new Imputado_Huella
                                {
                                    IMPUTADO = new cHuellasImputado {
                                        ID_ANIO = s.ID_ANIO, ID_CENTRO = s.ID_CENTRO, ID_IMPUTADO = s.ID_IMPUTADO
                                    },
                                    FMD             = Importer.ImportFmd(s.BIOMETRICO, Constants.Formats.Fmd.ANSI, Constants.Formats.Fmd.ANSI).Data,
                                    tipo_biometrico = (enumTipoBiometrico)s.BIOMETRICO_TIPO.ID_TIPO_BIOMETRICO
                                }).FirstOrDefault();
                                if (huella != null)
                                {
                                    HuellasImputadosVisitas.Add(huella);
                                }
                                TextoIncidenciaFalsoPositivo = "SIN OBSERVACIONES";
                                ImputadoEntrante             = new List <InternoVisitaLegal>();
                                ImagenImputado = new Imagenes().getImagenPerson();
                                IncidenciaRevertirVisitaLegalVisible = false;
                            }
                            catch (Exception ex)
                            {
                                throw new ApplicationException(ex.Message);
                            }
                        }
                    }
                }

                break;

            case "CancelarReversion":
                IncidenciaRevertirVisitaLegalVisible = false;
                break;
            }
        }