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); }
/* 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); }