internal static NotaFiscalSolicitada ToNotaFiscalSolicitada(this AutorizacaoNfeTo re, int usuarioId)
 {
     return(new NotaFiscalSolicitada()
     {
         Homologacao = re.Nfe.CapaAutorizacaoNfse.Homologacao,
         Identificador_nota = re.Nfe.CapaAutorizacaoNfse.Identificador_nota,
         UsuarioId = usuarioId,
         Autorizar = new Autorizar()
         {
             Data_emissao = re.Nfe.CapaAutorizacaoNfse.Autorizar.Data_emissao,
             Natureza_operacao = re.Nfe.CapaAutorizacaoNfse.Autorizar.Natureza_operacao,
             Optante_simples_nacional = re.Nfe.CapaAutorizacaoNfse.Autorizar.Optante_simples_nacional,
             UsuarioId = usuarioId,
             Prestador = new Prestador()
             {
                 Cnpj = re.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Cnpj,
                 Inscricao_municipal = re.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Inscricao_municipal,
                 Codigo_municipio = re.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Codigo_municipio,
                 UsuarioId = usuarioId
             },
             Tomador = new Tomador()
             {
                 Cpf = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Cpf,
                 Razao_social = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Razao_social,
                 Telefone = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Telefone,
                 Email = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Email,
                 UsuarioId = usuarioId,
                 Endereco = new Endereco()
                 {
                     Logradouro = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Logradouro,
                     Numero = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Numero,
                     Complemento = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Complemento,
                     Bairro = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Bairro,
                     Uf = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Uf,
                     Cep = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Cep,
                     UsuarioId = usuarioId
                 }
             },
             Servico = new Servico()
             {
                 Discriminacao = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Discriminacao,
                 Iss_retido = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Iss_retido,
                 Valor_iss = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Valor_iss,
                 Codigo_cnae = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Codigo_cnae,
                 Item_lista_servico = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Item_lista_servico,
                 Valor_servicos = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Valor_servicos,
                 UsuarioId = usuarioId
             }
         }
     });
 }
        internal static WsMobLinkService.CapaAutorizacaoNfse ToWsAutorizarService(this AutorizacaoNfeTo re, WsSoapServices wsSoapServices)
        {
            if (wsSoapServices == WsSoapServices.MobLink)
            {
                return(new WsMobLinkService.CapaAutorizacaoNfse()
                {
                    homologacao = false,
                    identificador_nota = re.Nfe.CapaAutorizacaoNfse.Identificador_nota,
                    autorizar = new WsMobLinkService.Autorizar()
                    {
                        data_emissao = re.Nfe.CapaAutorizacaoNfse.Autorizar.Data_emissao,
                        natureza_operacao = re.Nfe.CapaAutorizacaoNfse.Autorizar.Natureza_operacao,
                        optante_simples_nacional = re.Nfe.CapaAutorizacaoNfse.Autorizar.Optante_simples_nacional,
                        prestador = new WsMobLinkService.Prestador()
                        {
                            cnpj = re.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Cnpj,
                            inscricao_municipal = re.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Inscricao_municipal,
                            codigo_municipio = re.Nfe.CapaAutorizacaoNfse.Autorizar.Prestador.Codigo_municipio
                        },
                        tomador = new WsMobLinkService.Tomador()
                        {
                            cpf = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Cpf,
                            razao_social = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Razao_social,
                            telefone = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Telefone,
                            email = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Email,
                            endereco = new WsMobLinkService.Endereco()
                            {
                                logradouro = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Logradouro,
                                numero = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Numero,
                                complemento = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Complemento,
                                bairro = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Bairro,
                                uf = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Uf,
                                cep = re.Nfe.CapaAutorizacaoNfse.Autorizar.Tomador.Endereco.Cep
                            }
                        },
                        servico = new WsMobLinkService.Servico()
                        {
                            discriminacao = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Discriminacao,
                            iss_retido = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Iss_retido,
                            valor_iss = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Valor_iss,
                            codigo_cnae = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Codigo_cnae,
                            item_lista_servico = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Item_lista_servico,
                            valor_servicos = re.Nfe.CapaAutorizacaoNfse.Autorizar.Servico.Valor_servicos
                        }
                    }
                });
            }

            return(null);
        }
Beispiel #3
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);
        }