private void TimeCartao_Tick(object sender, EventArgs e) { string MsgAdicional = ""; if (SerialCartao.IsOpen == false) { SerialCartao.Open(); } LblMsg.Text = "Passe o cartão de identificação CId_S no leitor"; this.Refresh(); if (SerialCartao.BytesToRead > 0) { TimeCartao.Enabled = false; string NumeroCartao = SerialCartao.ReadExisting().ToString().Substring(3, 5); SerialCartao.Close(); //Fecha a porta para não receber mais nada. CPonto.CPontoClient oProxy = new CPonto.CPontoClient(); CPonto.CARTAO oCartao; CPonto.USUARIO oUsuario = null; CPonto.CARTAOUSUARIO oCartaoUsuario; int CodigoUsuario; oCartao = oProxy.SelecionaCartao(out oCartaoUsuario, NumeroCartao); bool PossuiAcesso = false; if (oCartao == null) { nTentativas += 1; if (LimiteTentativaAcesso > 0 && nTentativas > LimiteTentativaAcesso) { AcionaSirene(); } LblMsg.Text = "Cartão de identificação CId_S inválido ou não cadastrado no sistema. Entrar em contato com o departamento de Segurança Patrimonial."; } else { if ((bool)oCartao.CrBloqueado) { if (MatTentou != oCartaoUsuario.CSCodigoUsuario) { nTentativas = 1; } else { nTentativas += 1; } if (LimiteTentativaAcesso > 0 && nTentativas > LimiteTentativaAcesso) { AcionaSirene(); } CarregaDadosUsuario(oCartaoUsuario.CSCodigoUsuario, oProxy, out oUsuario); LblMsg.Text = "O cartão de identificação do usuário foi bloqueado pelo motivo: " + oCartao.CrMotivoBloqueio + "."; } else { try { PossuiAcesso = oProxy.PossuiPermissaoPonto(oCartaoUsuario.CSCodigoUsuario, CodigoPonto); } catch (Exception ex) { PossuiAcesso = false; MsgAdicional = ex.Message; } if (PossuiAcesso) { if (oPonto.PoBiometria) { LblMsg.Text = "Coloque o dedo cadastrado no leitor biométrico da impressão digital."; this.Refresh(); //Implementar o acesso biométrico CPonto.HASHDIGITAL[] oListaHash = oProxy.SelecionaHashUsuario(oCartaoUsuario.CSCodigoUsuario); m_NBioAPI = new NBioAPI(); uint ret; oIndexSearch = new NBioAPI.IndexSearch(m_NBioAPI); ret = oIndexSearch.InitEngine(); if (ret != NBioAPI.Error.NONE) { MsgErro(ret); } oIndexSearch.ClearDB(); foreach (CPonto.HASHDIGITAL oHash in oListaHash) { NBioAPI.Type.FIR_TEXTENCODE oFir = new NBioAPI.Type.FIR_TEXTENCODE(); oFir.TextFIR = oHash.HaCredencialBiometricaTextual; NBioAPI.IndexSearch.FP_INFO[] oInfo; oIndexSearch.AddFIR(oFir, uint.Parse(oHash.HaCodigo.ToString()), out oInfo); } if (AcessoBiometrico(out CodigoUsuario, oProxy, false)) { PossuiAcesso = true; } else { PossuiAcesso = false; } } if (oPonto.PoSenha) { //Acesso via senha de rede. FrmAutenticaRede oFrm = new FrmAutenticaRede(); oFrm.ShowDialog(); if (oFrm.Autenticado) { oUsuario = oFrm.Usuario; if (oUsuario.USCODIGO != oCartaoUsuario.CSCodigoUsuario) { PossuiAcesso = false; RegistrarAcesso(oProxy, oCartaoUsuario.CSCODIGO, oUsuario.USCODIGO, DateTime.Parse(LblDataHora.Text), true); if (MatTentou != oUsuario.USCODIGO) { nTentativas = 1; } else { nTentativas += 1; } if (LimiteTentativaAcesso > 0 && nTentativas > LimiteTentativaAcesso) { AcionaSirene(); } MatTentou = oUsuario.USCODIGO; CarregaDadosUsuario(oCartaoUsuario.CSCodigoUsuario, oProxy, out oUsuario); LblMsg.Text = "O usuário que se autenticou é diferente do usuário a qual pertence o crachá."; } } else { PossuiAcesso = false; } } if (oUsuario == null) { oUsuario = oProxy.SelecionaUsuario(oCartaoUsuario.CSCodigoUsuario); } NumeroDia += 1; if (VerificaEquipamentos(oProxy, oUsuario) == false) { CarregaDadosUsuario(oCartaoUsuario.CSCodigoUsuario, oProxy, out oUsuario); RegistrarAcesso(oProxy, oCartaoUsuario.CSCODIGO, oCartaoUsuario.CSCodigoUsuario, DateTime.Now, true); if (MatTentou != oCartaoUsuario.CSCodigoUsuario) { nTentativas = 1; } else { nTentativas += 1; } if (LimiteTentativaAcesso > 0 && nTentativas > LimiteTentativaAcesso) { AcionaSirene(); } MatTentou = oCartaoUsuario.CSCodigoUsuario; timer1.Enabled = true; return; } else { PossuiAcesso = true; } if (PossuiAcesso) { //Registrar que o acesso foi autorizado e acionar a porta elétrica para liberação LblDataHora.Text = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"); PctSemSinal.Visible = false; PctVerde.Visible = true; RegistrarAcesso(oProxy, oCartaoUsuario.CSCODIGO, oCartaoUsuario.CSCodigoUsuario, DateTime.Parse(LblDataHora.Text), false); CarregaDadosUsuario(oCartaoUsuario.CSCodigoUsuario, oProxy, out oUsuario); AcionaTranca(); } else { CarregaDadosUsuario(oCartaoUsuario.CSCodigoUsuario, oProxy, out oUsuario); RegistrarAcesso(oProxy, oCartaoUsuario.CSCODIGO, oCartaoUsuario.CSCodigoUsuario, DateTime.Parse(LblDataHora.Text), true); if (MatTentou != oCartaoUsuario.CSCodigoUsuario) { nTentativas = 1; } else { nTentativas += 1; } if (LimiteTentativaAcesso > 0 && nTentativas > LimiteTentativaAcesso) { AcionaSirene(); } MatTentou = oCartaoUsuario.CSCodigoUsuario; LblMsg.Text = "O Acesso não foi autorizado."; } } else { CarregaDadosUsuario(oCartaoUsuario.CSCodigoUsuario, oProxy, out oUsuario); RegistrarAcesso(oProxy, oCartaoUsuario.CSCODIGO, oCartaoUsuario.CSCodigoUsuario, DateTime.Now, true); if (MatTentou != oCartaoUsuario.CSCodigoUsuario) { nTentativas = 1; } else { nTentativas += 1; } if (LimiteTentativaAcesso > 0 && nTentativas > LimiteTentativaAcesso) { AcionaSirene(); } MatTentou = oCartaoUsuario.CSCodigoUsuario; LblMsg.Text = "O Usuário não possui acesso ao ponto de controle PCAP_S. Entrar em contato com a segurança patrimonial." + MsgAdicional + "."; } } } oProxy.Close(); //Libera o timer que limpa os dados e habilita novamente a leitura ou entaõ, libera o timer do cartao; timer1.Enabled = true; if (PossuiAcesso) { PctVerde.Visible = true; PctVermelho.Visible = false; PctAmarelo.Visible = false; PctSemSinal.Visible = false; } else { PctVerde.Visible = false; PctVermelho.Visible = true; PctAmarelo.Visible = false; PctSemSinal.Visible = false; } } }
private bool VerificaEquipamentos(CPonto.CPontoClient oProxy, CPonto.USUARIO oUsuario) { NumeroEquipamento = ""; string TAGEQUIPAMENTO = ""; bool ConseguiuLer = false; if (ChkEquipObrigatorio.Checked) { var oListaObrigatorio = from p in oListaEquipamentoPonto where p.EPObrigatorio == true select p; foreach (CPonto.vw_EquipamentoPonto oEquipamento in oListaObrigatorio) { //Caso a unidade não exija autenticação via crachá, solicitará os equipamentos de segurança //mas, para isso, precisa abrir a serial e fechar SerialCartao.Open(); LblMsg.Text = "Passe o equipamento " + oEquipamento.TEDescricao + " no leitor RFID. "; this.Refresh(); //O Delay será de 100 milissegundos para ver se a porta seria tem algo. //com 100 voltas, o sistema aguardará 10 segundos para a leitura do equipamento, senão, dará como leitura inválida e encerrará o processo. ConseguiuLer = false; for (int i = 0; i < 100; i++) { Delay(100); if (SerialCartao.BytesToRead > 9) { TAGEQUIPAMENTO = SerialCartao.ReadExisting().ToString().Substring(3, 5); ConseguiuLer = true; break; } } //Caso não tenha conseguido ler o equipamento, o retorno será falso if (ConseguiuLer == false) { LblMsg.Text = "Equipamento " + oEquipamento.TEDescricao + " não informado."; this.Refresh(); SerialCartao.Close(); return(false); } else { var Equipamento = oProxy.ListaEquipamentoUsuarioTAG(oUsuario.USCODIGO, TAGEQUIPAMENTO); if (Equipamento == null) { LblMsg.Text = "O equipamento informado não corresponde a um " + oEquipamento.TEDescricao + " relacionado com o usuário. "; this.Refresh(); SerialCartao.Close(); return(false); } } SerialCartao.Close(); } } if (ChkEquipRandomico.Checked) { var res = from p in OrdemVerificaRandomico where p == NumeroDia select p; if (res.Count() > 0) { var oListaRandomico = from p in oListaEquipamentoPonto where p.EPObrigatorio == false select p; foreach (CPonto.vw_EquipamentoPonto oEquipamento in oListaRandomico) { //Caso a unidade não exija autenticação via crachá, solicitará os equipamentos de segurança //mas, para isso, precisa abrir a serial e fechar SerialCartao.Open(); //****************************************************************************************** LblMsg.Text = "Você foi sorteado para passar os equipamentos pela ordem de acesso. Passe o equipamento " + oEquipamento.TEDescricao + " no leitor RFID. "; this.Refresh(); //O Delay será de 100 milissegundos para ver se a porta seria tem algo. //com 100 voltas, o sistema aguardará 10 segundos para a leitura do equipamento, senão, dará como leitura inválida e encerrará o processo. ConseguiuLer = false; for (int i = 0; i < 100; i++) { Delay(100); if (SerialCartao.BytesToRead > 0) { TAGEQUIPAMENTO = SerialCartao.ReadExisting().ToString().Substring(3, 5); ConseguiuLer = true; break; } } //Caso não tenha conseguido ler o equipamento, o retorno será falso if (ConseguiuLer == false) { LblMsg.Text = "Equipamento " + oEquipamento.TEDescricao + " não informado."; this.Refresh(); SerialCartao.Close(); return(false); } else { var Equipamento = oProxy.ListaEquipamentoUsuarioTAG(oUsuario.USCODIGO, TAGEQUIPAMENTO); if (Equipamento == null) { LblMsg.Text = "O equipamento informado não corresponde a um " + oEquipamento.TEDescricao + " relacionado com o usuário. "; this.Refresh(); SerialCartao.Close(); return(false); } } SerialCartao.Close(); } } } LblMsg.Text = ""; this.Refresh(); return(true); }