示例#1
0
        public async Task <Retorno <RetornoWsTo> > AutorizarAsync(WsMobLinkService.CapaAutorizacaoNfse objAutorizar)
        {
            var retorno = new Retorno <RetornoWsTo>()
            {
                Status = ResultadoOperacao.Sucesso
            };
            RetornoWsTo retornoWsTo = new RetornoWsTo();

            var stopwatch = new Stopwatch();

            /* Autoriza a emissão de uma Nfe */
            try
            {
                WsMobLinkService.WSnfseSoapClient clienteWs = new WsMobLinkService.WSnfseSoapClient(WsMobLinkService.WSnfseSoapClient.EndpointConfiguration.WSnfseSoap);

                if (_x509Certificate2 != null)
                {
                    clienteWs.ClientCredentials.ServiceCertificate.DefaultCertificate = _x509Certificate2;
                }

                retornoWsTo.Etapa = Models.Enum.EtapaRequisicao.PendenteEnvio;

                stopwatch.Start();
                var retornoWs = await clienteWs.AutorizarAsync(objAutorizar);

                stopwatch.Stop();

                RetornoServicoTmpTo retornoServicoToTmp = JsonConvert.DeserializeObject <RetornoServicoTmpTo>(retornoWs);

                RetornoServicoTo retornoServicoTo = new RetornoServicoTo()
                {
                    Codigo_municipo = objAutorizar.autorizar.prestador.codigo_municipio,
                    Ref             = retornoServicoToTmp.Ref != 0 ? retornoServicoToTmp.Ref : objAutorizar.identificador_nota,
                    Cnpj_prestador  = !string.IsNullOrEmpty(retornoServicoToTmp.Cnpj_prestador) ? retornoServicoToTmp.Cnpj_prestador : objAutorizar.autorizar.prestador.cnpj,
                    Status          = !string.IsNullOrEmpty(retornoServicoToTmp.Status) ? retornoServicoToTmp.Status : retornoServicoToTmp.Codigo,
                    Mensagem        = retornoServicoToTmp.Mensagem
                };

                retornoWsTo.Etapa            = Models.Enum.EtapaRequisicao.ComRetorno;
                retornoWsTo.TempoExecucao    = stopwatch.Elapsed.Seconds;
                retornoWsTo.RetornoServicoTo = retornoServicoTo;
                retorno.Objeto = retornoWsTo;
            }
            catch (Exception ex)
            {
                retorno.Mensagens.Add(new MensagemSistemaDto()
                {
                    Identificador = "EXCEPTION", Mensagem = string.Format("{0} - {1}", ex.Message, ex.InnerException != null ? ex.InnerException.Message : string.Empty)
                });
                retorno.Mensagens.Add(new MensagemSistemaDto()
                {
                    Identificador = "CDXNF0002", Mensagem = string.Format("Ocorreu um erro ao tentar autorizar a nota fiscal de referência {0}.", objAutorizar.identificador_nota.ToString())
                });
                retornoWsTo.Observacao = string.Format("{0} - {1}", ex.Message, ex.InnerException != null ? ex.InnerException.Message : string.Empty);
                retorno.Status         = ResultadoOperacao.Falha;
                return(retorno);
            }

            return(retorno);
        }
示例#2
0
        /* Async */
        public async Task <Retorno <RetornoServicoTo> > AutorizarAsync(AutorizacaoNfeTo autorizacaoNfeTo)
        {
            var retorno = new Retorno <RetornoServicoTo>()
            {
                Status = ResultadoOperacao.Sucesso
            };

            #region ValidaInicioProcesso

            retorno = await ValidaInicioProcesso(autorizacaoNfeTo.Autenticacao.Usuario, autorizacaoNfeTo.Autenticacao.Senha, autorizacaoNfeTo.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Codigo_municipio, autorizacaoNfeTo.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Cnpj);

            if (retorno.Status != ResultadoOperacao.Sucesso)
            {
                retorno.Status = ResultadoOperacao.Falha;
                return(retorno);
            }

            #endregion

            var usuario = await _usuarioRepositoy.ObterTodosAsync(autorizacaoNfeTo.Autenticacao.Usuario, autorizacaoNfeTo.Autenticacao.Senha);

            var cidade = await _cidadeNfeRepository.ObterTodosAsync(autorizacaoNfeTo.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Codigo_municipio, string.Empty);

            var parametros = await _parametroRepository.ObterTodosAsync(autorizacaoNfeTo.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Codigo_municipio, autorizacaoNfeTo.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Cnpj);

            if (!parametros.UtilizaCertificado)
            {
                _x509Certificate2 = null;
            }

            /* Gera nova sequencia para referenciar nota fiscal */
            var referencia = await _db.GetReferenciaAsync();

            autorizacaoNfeTo.Nfe.CapaAutorizacaoNfse.Identificador_nota = referencia;

            /* Registra a requisição */
            var req = new Requisicao
            {
                TipoOperacao  = TipoOperacao.Autorizacao,
                Referencia    = referencia,
                Etapa         = EtapaRequisicao.RecebidoPedido,
                Status        = StatusOperacao.Indefinido,
                Cidade        = cidade,
                ValorNota     = autorizacaoNfeTo.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Valor_servicos,
                UsuarioId     = usuario.Id,
                Prestador     = parametros.Prestador,
                ServicoWsSoap = parametros.ServicoWsSoap
            };

            int requisicaoId = await _requisicaoRepository.InserirAsync(req);

            try
            {
                NotaFiscalSolicitada objNotaFiscalSolicitada = autorizacaoNfeTo.ToNotaFiscalSolicitada(usuario.Id);
                var nfeSlicitadaId = await _notaFiscalSolicitadaRepository.InserirAsync(objNotaFiscalSolicitada);

                Retorno <RetornoWsTo> retornoServicoWs = null;

                /* Autorizar a emissão da nfe */
                if (parametros.ServicoWsSoap.Codigo == (int)WsSoapServices.MobLink)
                {
                    WsMobLinkService.CapaAutorizacaoNfse objAutorizar = autorizacaoNfeTo.ToWsAutorizarService(WsSoapServices.MobLink);

                    MobLinkService mobLinkService = new MobLinkService(_x509Certificate2);

                    retornoServicoWs = await mobLinkService.AutorizarAsync(objAutorizar);

                    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 = ResultadoOperacao.Falha;
                        return(retorno);
                    }

                    var reqAuteracao = await _requisicaoRepository.ObterPorIdAsync(requisicaoId);

                    reqAuteracao.Status = retornoServicoWs.Objeto.RetornoServicoTo != null?getStatusRequisicao(retornoServicoWs.Objeto.RetornoServicoTo.Status) : StatusOperacao.Indefinido;

                    reqAuteracao.Etapa = retornoServicoWs.Objeto.Etapa;
                    _requisicaoRepository.Alterar(reqAuteracao);
                }
                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);
                }

                Requisicao 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.RetornoServicoTo != null ? retornoServicoWs.Objeto.RetornoServicoTo.Status : string.Empty, retornoServicoWs.Objeto.RetornoServicoTo != null ? retornoServicoWs.Objeto.RetornoServicoTo.Mensagem : string.Empty);
                _requisicaoRepository.Alterar(requisicaoAlteracao);

                retorno.Objeto = retornoServicoWs.Objeto.RetornoServicoTo;
            }
            catch (Exception ex)
            {
                var mensagem     = string.Format("O Não foi possível soliciatar a autorização da nota fiscal de referência {0}.", 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 = "Solicitação de Nota", Identificador = "CDXNF0001", Mensagem = mensagem
                });
                retorno.Status = ResultadoOperacao.Falha;
            }

            return(retorno);
        }
示例#3
0
 public System.Threading.Tasks.Task <string> AutorizarAsync(WsMobLinkService.CapaAutorizacaoNfse obj)
 {
     return(base.Channel.AutorizarAsync(obj));
 }