/// <summary> /// Obtem todos por parametro /// </summary> public Retorno <NotaFiscalRetornoTo> ObterTodos(PesquisaNotaFiscalTo pesquisaTo) { var retorno = new Retorno <NotaFiscalRetornoTo>(); var notaFiscalAutorizada = _db.NotaFiscalAutorizada .Where(p => p.Numero == pesquisaTo.Numero) .FirstOrDefaultAsync().Result; if (notaFiscalAutorizada == null) { retorno.Mensagens.Add(new MensagemSistemaDto() { Identificador = "CDXNF0001", Mensagem = string.Format("Não foi localizada nota fiscal com o numero {0}.", pesquisaTo.Numero) }); retorno.Status = ResultadoOperacao.Alerta; return(retorno); } var notaFiscalRetornoTo = new NotaFiscalRetornoTo() { Numero = notaFiscalAutorizada.Numero, Url = notaFiscalAutorizada.UrlPrefeitura, Imagem = Convert.ToBase64String(notaFiscalAutorizada.ImagemNfe) }; retorno.Objeto = notaFiscalRetornoTo; retorno.Status = ResultadoOperacao.Sucesso; return(retorno); }
public async Task <Retorno <NotaFiscalRetornoTo> > ConsultarAsync(ConsultaNfeTo consultaNfeTo) { var notaFiscalRetornoTo = new NotaFiscalRetornoTo(); var retorno = new Retorno <NotaFiscalRetornoTo>() { Status = ResultadoOperacao.Sucesso }; #region ValidaInicioProcesso Retorno <RetornoServicoTo> retornoValidacao = await ValidaInicioProcesso(consultaNfeTo.Autenticacao.Usuario, consultaNfeTo.Autenticacao.Senha, consultaNfeTo.CodigoMunicipio, consultaNfeTo.CnpjPrestador); if (retornoValidacao.Status != ResultadoOperacao.Sucesso) { retorno.Status = ResultadoOperacao.Falha; return(retorno); } #endregion var usuario = await _usuarioRepositoy.ObterTodosAsync(consultaNfeTo.Autenticacao.Usuario, consultaNfeTo.Autenticacao.Senha); var cidade = await _cidadeNfeRepository.ObterTodosAsync(consultaNfeTo.CodigoMunicipio, string.Empty); var parametros = await _parametroRepository.ObterTodosAsync(consultaNfeTo.CodigoMunicipio, consultaNfeTo.CnpjPrestador); /* Verifica se nota existe na base */ var notaAutorizada = await _notaFiscalAutorizadaRepository.ObterTodosAsync(string.Empty, consultaNfeTo.Referencia); if (notaAutorizada != null) { /* Retorno do metodo */ notaFiscalRetornoTo.Status = string.Format("Nota Fiscal obtida da Base {0}", notaAutorizada.Numero); if (Convert.ToInt32(consultaNfeTo.FormaRetorno) == (int)TipoRetorno.Url) { notaFiscalRetornoTo.Url = notaAutorizada.UrlPrefeitura; } else { notaFiscalRetornoTo.Imagem = Convert.ToBase64String(notaAutorizada.ImagemNfe); } notaFiscalRetornoTo.Numero = notaAutorizada.Numero; var objRequisicao = new Requisicao() { Etapa = EtapaRequisicao.RecebidoPedido, TempoExecucao = 0, Observacao = string.Format("Nota Fiscal obtida da Base {0}", notaAutorizada.Numero), Cidade = cidade, UsuarioId = usuario.Id, Prestador = parametros.Prestador, ServicoWsSoap = parametros.ServicoWsSoap, Referencia = Convert.ToInt32(consultaNfeTo.Referencia), TipoOperacao = TipoOperacao.Consulta, NotaFiscalAutorizadaId = notaAutorizada.Id }; await _requisicaoRepository.InserirAsync(objRequisicao); retorno.Objeto = notaFiscalRetornoTo; retorno.Status = ResultadoOperacao.Sucesso; return(retorno); } ServicoWsSoap servicoWsSoap = new ServicoWsSoap(); /* Obtem cliente da requisição de autorização*/ Requisicao requisicaoCliente = null; requisicaoCliente = await _requisicaoRepository.ObterTodosPorStatusAsync(Convert.ToInt32(consultaNfeTo.Referencia), TipoOperacao.Autorizacao, EtapaRequisicao.Processada, StatusOperacao.OperacaoEfetivada); if (requisicaoCliente == null) { requisicaoCliente = await _requisicaoRepository.ObterTodosPorStatusAsync(Convert.ToInt32(consultaNfeTo.Referencia), TipoOperacao.Autorizacao, EtapaRequisicao.Processada, StatusOperacao.ProcessandoOperacao); } if (requisicaoCliente != null) { /* Cliente pelo qual foi realizada o pedido de autorização (Autorizar a emissão de uma nfe)*/ servicoWsSoap = requisicaoCliente.ServicoWsSoap; } else { servicoWsSoap = parametros.ServicoWsSoap; } /* Registra a requisição */ var requisicao = new Requisicao { TipoOperacao = TipoOperacao.Consulta, Referencia = Convert.ToInt32(consultaNfeTo.Referencia), Etapa = EtapaRequisicao.RecebidoPedido, Status = StatusOperacao.Indefinido, Cidade = cidade, UsuarioId = usuario.Id, Prestador = parametros.Prestador, ServicoWsSoap = parametros.ServicoWsSoap }; int requisicaoId = await _requisicaoRepository.InserirAsync(requisicao); try { Retorno <RetornoWsTo> retornoServicoWs = null; /* Emite nota fiscal */ if (servicoWsSoap.Codigo == (int)WsSoapServices.MobLink) { WsMobLinkService.Consultar objConsultar = consultaNfeTo.ToWsConsultarService(WsSoapServices.MobLink); MobLinkService mobLinkService = new MobLinkService(_x509Certificate2); retornoServicoWs = await mobLinkService.ConsultarAsync(objConsultar); if (retornoServicoWs.Status != ResultadoOperacao.Sucesso) { var requisicaoErro = await _requisicaoRepository.ObterPorIdAsync(requisicaoId); requisicaoErro.Status = StatusOperacao.Erro; requisicaoErro.Erro = retornoServicoWs.Mensagens.Count > 0 ? retornoServicoWs.Mensagens[0].Mensagem : string.Empty; requisicaoErro.Etapa = retornoServicoWs.Objeto != null ? retornoServicoWs.Objeto.Etapa : EtapaRequisicao.PendenteEnvio; _requisicaoRepository.Alterar(requisicaoErro); retorno.Mensagens.AddRange(retornoServicoWs.Mensagens); retorno.Status = retornoServicoWs.Status; return(retorno); } var reqNovaEtapa = await _requisicaoRepository.ObterPorIdAsync(requisicaoId); reqNovaEtapa.Status = retornoServicoWs.Objeto.DeserializedNfe != null?getStatusRequisicao(retornoServicoWs.Objeto.DeserializedNfe.Status) : StatusOperacao.Indefinido; reqNovaEtapa.Observacao = retornoServicoWs.Objeto.DeserializedNfe != null ? retornoServicoWs.Objeto.DeserializedNfe.Status : string.Empty; reqNovaEtapa.Etapa = retornoServicoWs.Objeto.Etapa; _requisicaoRepository.Alterar(reqNovaEtapa); } else { retorno.Mensagens.Add(new MensagemSistemaDto() { Identificador = "CDXNF0005", Mensagem = string.Format("Não há um serviço soap cadastrado para a cidade de {0} .", cidade.Descricao) }); retorno.Status = ResultadoOperacao.Falha; return(retorno); } if (getStatusRequisicao(retornoServicoWs.Objeto.DeserializedNfe.Status) == StatusOperacao.ProcessandoOperacao || getStatusRequisicao(retornoServicoWs.Objeto.DeserializedNfe.Status) != StatusOperacao.OperacaoEfetivada) { notaFiscalRetornoTo.Status = retornoServicoWs.Objeto.DeserializedNfe.Status; retorno.Objeto = notaFiscalRetornoTo; retorno.Status = ResultadoOperacao.Alerta; return(retorno); } /* Obtendo a data de emissão*/ var numsegs = Convert.ToInt32(retornoServicoWs.Objeto.DeserializedNfe.data_emissao.Replace("/Date(", "").Replace(")/", "").Substring(0, 10)); System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); var dataEmissao = dtDateTime.AddSeconds(numsegs).ToLocalTime(); var requisicaoAlteracao = await _requisicaoRepository.ObterPorIdAsync(requisicaoId); requisicaoAlteracao.Etapa = EtapaRequisicao.Processada; requisicaoAlteracao.TempoExecucao = retornoServicoWs.Objeto.TempoExecucao; requisicaoAlteracao.Observacao = string.Format("{0} {1} {2}", retornoServicoWs.Objeto.Observacao, retornoServicoWs.Objeto.DeserializedNfe != null ? retornoServicoWs.Objeto.DeserializedNfe.Status : string.Empty, retornoServicoWs.Objeto.DeserializedNfe != null ? retornoServicoWs.Objeto.DeserializedNfe.Numero : string.Empty); _requisicaoRepository.Alterar(requisicaoAlteracao); /* Grava dados da nota fiscal emitida */ NotaFiscalAutorizada notaFiscalAutorizada = new NotaFiscalAutorizada() { UsuarioId = usuario.Id, Referencia = retornoServicoWs.Objeto.DeserializedNfe.Ref, Status = retornoServicoWs.Objeto.DeserializedNfe.Status, Numero = retornoServicoWs.Objeto.DeserializedNfe.Numero, CodigoVerificacao = retornoServicoWs.Objeto.DeserializedNfe.Codigo_verificacao, DataEmissao = dataEmissao, UrlPrefeitura = retornoServicoWs.Objeto.DeserializedNfe.Url, CaminhoNfe = retornoServicoWs.Objeto.DeserializedNfe.caminho_xml_nota_fiscal, ImagemNfe = retornoServicoWs.Objeto.DeserializedNfe.Retorno_nota, ServicoWsSoap = parametros.ServicoWsSoap, Prestador = parametros.Prestador }; var notaFiscalAutorizadaId = await _notaFiscalAutorizadaRepository.InserirAsync(notaFiscalAutorizada); /* Vincular a nota fiscal autorizada a requisição que solicitou a autorização */ requisicaoCliente.NotaFiscalAutorizadaId = notaFiscalAutorizadaId; requisicaoCliente.Observacao = retornoServicoWs.Objeto.DeserializedNfe != null ? retornoServicoWs.Objeto.DeserializedNfe.Status : string.Empty; _requisicaoRepository.Alterar(requisicaoAlteracao); /* Retorno do metodo */ notaFiscalRetornoTo.Status = retornoServicoWs.Objeto.DeserializedNfe.Status; if (Convert.ToInt32(consultaNfeTo.FormaRetorno) == (int)TipoRetorno.Url) { notaFiscalRetornoTo.Url = retornoServicoWs.Objeto.DeserializedNfe.Url; } else { notaFiscalRetornoTo.Imagem = Convert.ToBase64String(retornoServicoWs.Objeto.DeserializedNfe.Retorno_nota); } notaFiscalRetornoTo.Numero = retornoServicoWs.Objeto.DeserializedNfe.Numero; retorno.Status = ResultadoOperacao.Sucesso; retorno.Objeto = notaFiscalRetornoTo; } catch (Exception ex) { var mensagem = string.Format("Não foi possível obter a nota fiscal de referência {0}.", consultaNfeTo.Referencia); var requisicaoex = await _requisicaoRepository.ObterPorIdAsync(requisicaoId); requisicaoex.Erro = string.Format("{0} - {1}", ex.Message, ex.InnerException != null ? ex.InnerException.Message : string.Empty); requisicaoex.Status = StatusOperacao.Erro; requisicaoex.Observacao = mensagem; _requisicaoRepository.Alterar(requisicaoex); retorno.Mensagens.Add(new MensagemSistemaDto() { Titulo = "Consulta de Nota", Identificador = "CDXNF0001", Mensagem = mensagem }); retorno.Status = ResultadoOperacao.Falha; } return(retorno); }