コード例 #1
0
        public bool ExecutarConsultaStatus(ConfiguracaoEntity config, Modelo modelo)
        {
            var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao;
            var codigoUf = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), _emissorService.GetEmissor().Endereco.UF);

            X509Certificate2 certificado = null;

            var certificadoEntity = _certificadoService.GetCertificado();

            if (certificadoEntity == null)
            {
                return(false);
            }

            if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho))
            {
                certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho,
                                                                       RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha));
            }
            else
            {
                certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false);
            }

            return(NFeStatusServico.ExecutarConsultaStatus(codigoUf, ambiente, certificado, modelo));
        }
コード例 #2
0
        public static int EnviarNotaFiscal(out NotaFiscal notaFiscal, out ConfiguracaoEntity config, Destinatario destinatario = null)
        {
            notaFiscal = null;
            config     = ConfiguracaoService.GetConfiguracao();
            var ambiente    = Ambiente.Homologacao;
            var modeloNota  = Modelo.Modelo65;
            var tipoEmissao = TipoEmissao.Normal;

            var documentoDanfe = destinatario != null ? destinatario.DocumentoDanfe : "CPF"; //Encapsular isso aqui

            var emitente = EmissorService.GetEmissor();
            var codigoUF = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), emitente.Endereco.UF);
            var serie    = config.SerieNFCeHom;
            var numero   = config.ProximoNumNFCeHom;

            var identificacao = GetIdentificacao(codigoUF, DateTime.Now, emitente, modeloNota, Convert.ToInt32(serie), numero, tipoEmissao, ambiente, documentoDanfe);
            var produtos      = GetProdutos(config);
            var totalNFe      = GetTotalNFe();
            var pagamentos    = GetPagamentos();
            var infoAdicional = new InfoAdicional(produtos);
            var transporte    = new Transporte(modeloNota, null, null);

            notaFiscal = new NFe.Core.TO.NotaFiscal(emitente, destinatario, identificacao, transporte, totalNFe, infoAdicional, produtos, pagamentos);

            string            cscId       = config.CscIdHom;
            string            csc         = config.CscHom;
            NotaFiscalService notaService = new NotaFiscalService();

            return(notaService.EnviarNotaFiscalAsync(notaFiscal, cscId, csc).Result);
        }
コード例 #3
0
        private void LoadedCmd_Execute()
        {
            var configuracao = _configuracaoService.GetConfiguracao();

            if (configuracao == null)
            {
                return;
            }
            IsProducao = configuracao.IsProducao;

            CscHom   = configuracao.CscHom;
            CscIdHom = configuracao.CscIdHom;
            EmailContabilidadeHom = configuracao.EmailContabilidadeHom;
            ProximoNumNFCeHom     = configuracao.ProximoNumNFCeHom;
            ProximoNumNFeHom      = configuracao.ProximoNumNFeHom;
            SerieNFCeHom          = configuracao.SerieNFCeHom;
            SerieNFeHom           = configuracao.SerieNFeHom;

            CscProd   = configuracao.Csc;
            CscIdProd = configuracao.CscId;
            EmailContabilidadeProd = configuracao.EmailContabilidade;
            ProximoNumNFCeProd     = configuracao.ProximoNumNFCe;
            ProximoNumNFeProd      = configuracao.ProximoNumNFe;
            SerieNFCeProd          = configuracao.SerieNFCe;
            SerieNFeProd           = configuracao.SerieNFe;

            _configuracao = configuracao;
        }
コード例 #4
0
        public int Salvar(ConfiguracaoEntity configuracao)
        {
            if (configuracao.Id == 0)
            {
                _context.Configuracao.Add(configuracao);
            }

            _context.SaveChanges();
            return(configuracao.Id);
        }
コード例 #5
0
        private static List <NFe.Core.Model.Produto> GetProdutos(ConfiguracaoEntity config)
        {
            var produtos = new List <NFe.Core.Model.Produto>();

            var ProdutoEntity = ProdutoService.GetByCodigo("0001");
            var grupoImpostos = new GrupoImpostosRepository(context).GetById(ProdutoEntity.GrupoImpostosId);

            var produto = new NFe.Core.Model.Produto(grupoImpostos, ProdutoEntity.Id, grupoImpostos.CFOP, ProdutoEntity.Codigo, ProdutoEntity.Descricao, ProdutoEntity.NCM,
                                                     1, ProdutoEntity.UnidadeComercial,
                                                     ProdutoEntity.ValorUnitario, 0, !config.IsProducao);

            produtos.Add(produto);

            return(produtos);
        }
コード例 #6
0
 public ConfiguracaoRepositoryFake()
 {
     _configuracao = new ConfiguracaoEntity()
     {
         Id                = 1,
         SerieNFCe         = "001",
         SerieNFCeHom      = "001",
         SerieNFe          = "001",
         SerieNFeHom       = "001",
         ProximoNumNFCe    = "1",
         ProximoNumNFCeHom = "1",
         ProximoNumNFe     = "1",
         ProximoNumNFeHom  = "1",
         IsProducao        = false
     };
 }
コード例 #7
0
        private void LoadConfig(bool isProducao)
        {
            _configuracao = _configuracaoService.GetConfiguracao();

            CscHom   = _configuracao.CscHom;
            CscIdHom = _configuracao.CscIdHom;
            EmailContabilidadeHom = _configuracao.EmailContabilidadeHom;
            ProximoNumNFCeHom     = _configuracao.ProximoNumNFCeHom;
            ProximoNumNFeHom      = _configuracao.ProximoNumNFeHom;
            SerieNFCeHom          = _configuracao.SerieNFCeHom;
            SerieNFeHom           = _configuracao.SerieNFeHom;

            CscProd   = _configuracao.Csc;
            CscIdProd = _configuracao.CscId;
            EmailContabilidadeProd = _configuracao.EmailContabilidade;
            ProximoNumNFCeProd     = _configuracao.ProximoNumNFCe;
            ProximoNumNFeProd      = _configuracao.ProximoNumNFe;
            SerieNFCeProd          = _configuracao.SerieNFCe;
            SerieNFeProd           = _configuracao.SerieNFe;
        }
コード例 #8
0
        private static void ConfigurarConfiguracao()
        {
            var configuracao = new ConfiguracaoEntity
            {
                Id                = 1,
                SerieNFCe         = "001",
                SerieNFCeHom      = "001",
                SerieNFe          = "001",
                SerieNFeHom       = "001",
                ProximoNumNFCe    = "1",
                ProximoNumNFCeHom = "1",
                ProximoNumNFe     = "1",
                ProximoNumNFeHom  = "1",
                IsProducao        = false
            };

            var configuracaoServiceMock = new Mock <IConfiguracaoService>();

            configuracaoServiceMock.Setup(m => m.GetConfiguracao()).Returns(configuracao);
        }
コード例 #9
0
        private void SalvarCmd_Execute(Window wdw)
        {
            ValidateModel();

            if (!HasErrors)
            {
                ConfiguracaoEntity configuracao = null;

                if (_configuracaoService.GetConfiguracao() == null)
                {
                    configuracao = new ConfiguracaoEntity();
                }
                else
                {
                    configuracao = _configuracaoService.GetConfiguracao();
                }

                configuracao.IsProducao = IsProducao;

                configuracao.CscHom   = CscHom;
                configuracao.CscIdHom = CscIdHom;
                configuracao.EmailContabilidadeHom = EmailContabilidadeHom;
                configuracao.ProximoNumNFCeHom     = ProximoNumNFCeHom;
                configuracao.ProximoNumNFeHom      = ProximoNumNFeHom;
                configuracao.SerieNFCeHom          = SerieNFCeHom;
                configuracao.SerieNFeHom           = SerieNFeHom;

                configuracao.Csc   = CscProd;
                configuracao.CscId = CscIdProd;
                configuracao.EmailContabilidade = EmailContabilidadeProd;
                configuracao.ProximoNumNFCe     = ProximoNumNFCeProd;
                configuracao.ProximoNumNFe      = ProximoNumNFeProd;
                configuracao.SerieNFCe          = SerieNFCeProd;
                configuracao.SerieNFe           = SerieNFeProd;

                _configuracaoService.Salvar(configuracao);
                _configuracao = null;
                ConfiguracaoAlteradaEvent();
                wdw.Close();
            }
        }
コード例 #10
0
        public void Salvar(ConfiguracaoEntity configuracao)
        {
            var config = _configuracaoRepository.GetConfiguracao();

            if (config == null)
            {
                config = new ConfiguracaoEntity();
            }

            config.IsProducao = configuracao.IsProducao;

            config.CscHom   = configuracao.CscHom;
            config.CscIdHom = configuracao.CscIdHom;
            config.EmailContabilidadeHom = configuracao.EmailContabilidadeHom;
            config.ProximoNumNFCeHom     = configuracao.ProximoNumNFCeHom;
            config.ProximoNumNFeHom      = configuracao.ProximoNumNFeHom;
            config.SerieNFCeHom          = configuracao.SerieNFCeHom;
            config.SerieNFeHom           = configuracao.SerieNFeHom;

            config.Csc   = configuracao.Csc;
            config.CscId = configuracao.CscId;
            config.EmailContabilidade = configuracao.EmailContabilidade;
            config.ProximoNumNFCe     = configuracao.ProximoNumNFCe;
            config.ProximoNumNFe      = configuracao.ProximoNumNFe;
            config.SerieNFCe          = configuracao.SerieNFCe;
            config.SerieNFe           = configuracao.SerieNFe;

            config.IsContingencia = configuracao.IsContingencia;

            if (configuracao.DataHoraEntradaContingencia == new DateTime())
            {
                config.DataHoraEntradaContingencia = DateTime.Now;
            }
            else
            {
                config.DataHoraEntradaContingencia = configuracao.DataHoraEntradaContingencia;
            }

            config.JustificativaContingencia = configuracao.JustificativaContingencia;
            _configuracaoRepository.Salvar(config);
        }
コード例 #11
0
        private List <Produto> GetProdutos(NotaFiscalModel notaFiscal, ConfiguracaoEntity config)
        {
            var idsProdutosSelecionados = notaFiscal.Produtos.Select(p => p.ProdutoSelecionado.Id);
            var produtosTo = _produtoService.GetAll().Where(p => idsProdutosSelecionados.Contains(p.Id));
            var produtos   = new List <Produto>();

            foreach (var produtoNota in notaFiscal.Produtos)
            {
                var produtoEntity = produtosTo.First(c => c.Id == produtoNota.ProdutoSelecionado.Id);

                var produto = new Produto(produtoEntity.GrupoImpostos, produtoEntity.Id,
                                          produtoEntity.GrupoImpostos.CFOP, produtoEntity.Codigo, produtoEntity.Descricao, produtoEntity.NCM,
                                          notaFiscal.Produtos.First(p => p.ProdutoSelecionado.Id == produtoEntity.Id).QtdeProduto,
                                          produtoEntity.UnidadeComercial,
                                          produtoNota.ValorUnitario, produtoNota.Descontos, !config.IsProducao);

                produtos.Add(produto);
            }

            return(produtos);
        }
コード例 #12
0
 public Task <ConfiguracaoEntity> GetConfiguracaoAsync()
 {
     return(Task.Run(() => { return _configuracao = _configuracaoRepository.GetConfiguracao(); }));
 }
コード例 #13
0
 public ConfiguracaoEntity GetConfiguracao()
 {
     return(_configuracao = _configuracaoRepository.GetConfiguracao());
 }
コード例 #14
0
 public ConfiguracaoService(IConfiguracaoRepository configuracaoRepository)
 {
     _configuracaoRepository = configuracaoRepository;
     _configuracao           = _configuracaoRepository.GetConfiguracao();
 }
コード例 #15
0
 public int Salvar(ConfiguracaoEntity configuracao)
 {
     _configuracao = configuracao;
     return(_configuracao.Id);
 }
コード例 #16
0
 public void Excluir(ConfiguracaoEntity configuracao)
 {
     _context.Configuracao.Remove(configuracao);
     _context.SaveChanges();
 }
コード例 #17
0
        private async Task<List<string>> TransmitirConsultarLoteContingenciaAsync(ConfiguracaoEntity config,
    List<string> notasNfCe, Modelo modelo)
        {
            var retornoTransmissao = TransmitirLoteNotasFiscaisContingencia(notasNfCe, modelo);

            switch (retornoTransmissao.TipoMensagem)
            {
                case TipoMensagem.ErroValidacao:
                    return new List<string> { retornoTransmissao.Mensagem };
                case TipoMensagem.ServicoIndisponivel:
                    return new List<string> { MensagemErro };
            }

            var tempoEspera = int.Parse(retornoTransmissao.RetEnviNFeInfRec.tMed) * 1000;
            var erros = new List<string>();
            Thread.Sleep(tempoEspera);
            var resultadoConsulta = ConsultarReciboLoteContingencia(retornoTransmissao.RetEnviNFeInfRec.nRec, modelo);

            if (resultadoConsulta == null) return new List<string> { MensagemErro };

            foreach (var resultado in resultadoConsulta)
            {
                var nota = _notaFiscalRepository.GetNotaFiscalByChave(resultado.Chave);

                if (resultado.CodigoStatus == "100")
                {
                    nota.DataAutorizacao = DateTime.ParseExact(resultado.DataAutorizacao, "yyyy-MM-ddTHH:mm:sszzz",
                        CultureInfo.InvariantCulture);
                    nota.Protocolo = resultado.Protocolo;
                    nota.Status = (int)Status.ENVIADA;

                    var xml = await nota.LoadXmlAsync();
                    xml = xml.Replace("<protNFe />", resultado.Xml);

                     _notaFiscalRepository.Salvar(nota, xml);
                }
                else
                {
                    if (resultado.Motivo.Contains("Duplicidade"))
                    {
                        X509Certificate2 certificado;
                        var certificadoEntity = _certificadoRepository.GetCertificado();
                        var emitente = _emissorService.GetEmissor();

                        if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho))
                            certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho,
                                RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha));
                        else
                            certificado =
                                _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false);

                        var retornoConsulta = _nfeConsulta.ConsultarNotaFiscal
                        (
                            nota.Chave,
                            emitente.Endereco.CodigoUF,
                            certificado,
                            config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao,
                            nota.Modelo.Equals("65") ? Modelo.Modelo65 : Modelo.Modelo55
                        );

                        if (retornoConsulta.IsEnviada)
                        {
                            var protSerialized = XmlUtil.Serialize(retornoConsulta.Protocolo, string.Empty)
                                .Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty)
                                .Replace("TProtNFe", "protNFe");

                            protSerialized = Regex.Replace(protSerialized, "<infProt (.*?)>", "<infProt>");

                            nota.DataAutorizacao = retornoConsulta.DhAutorizacao;
                            nota.Protocolo = retornoConsulta.Protocolo.infProt.nProt;
                            nota.Status = (int)Status.ENVIADA;

                            var xml = await nota.LoadXmlAsync();
                            xml = xml.Replace("<protNFe />", protSerialized);

                             _notaFiscalRepository.Salvar(nota, xml);
                        }
                        else
                        {
                            erros.Add(
                                $"Modelo: {nota.Modelo} Nota: {nota.Numero} Série: {nota.Serie} \nMotivo: {resultado.Motivo}"); //O que fazer com essas mensagens de erro?
                        }
                    }
                    else
                    {
                        erros.Add(
                            $"Modelo: {nota.Modelo} Nota: {nota.Numero} Série: {nota.Serie} \nMotivo: {resultado.Motivo}"); //O que fazer com essas mensagens de erro?
                    }
                }
            }

            return erros;
        }
コード例 #18
0
 public void Excluir(ConfiguracaoEntity configuracao)
 {
     throw new NotImplementedException();
 }
コード例 #19
0
        private Task <NotaFiscalEntity> ConsultarNotasAsync(int idNotaFiscalDb, string codigoUf,
                                                            X509Certificate2 certificado, ConfiguracaoEntity config)
        {
            return(Task.Run(async() =>
            {
                var notaFiscalDb = _notaFiscalRepository.GetNotaFiscalById(idNotaFiscalDb, true);
                var document = new XmlDocument();
                var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao;
                var modelo = notaFiscalDb.Modelo.Equals("65") ? Modelo.Modelo65 : Modelo.Modelo55;

                var mensagemRetorno =
                    _nfeConsulta.ConsultarNotaFiscal(notaFiscalDb.Chave, codigoUf, certificado, ambiente, modelo);

                if (!mensagemRetorno.IsEnviada)
                {
                    return null;
                }

                mensagemRetorno.Protocolo.infProt.Id = null;
                var protSerialized = XmlUtil.Serialize(mensagemRetorno.Protocolo, "");

                var doc = XDocument.Parse(protSerialized);
                doc.Descendants().Attributes().Where(a => a.IsNamespaceDeclaration).Remove();

                foreach (var element in doc.Descendants())
                {
                    element.Name = element.Name.LocalName;
                }

                using (var xmlReader = doc.CreateReader())
                {
                    document.Load(xmlReader);
                }

                notaFiscalDb.DataAutorizacao = mensagemRetorno.Protocolo.infProt.dhRecbto;
                notaFiscalDb.Protocolo = mensagemRetorno.Protocolo.infProt.nProt;

                var xml = await notaFiscalDb.LoadXmlAsync();
                xml = xml.Replace("<protNFe />", document.OuterXml.Replace("TProtNFe", "protNFe"));

                notaFiscalDb.Status = (int)Status.ENVIADA;
                _notaFiscalRepository.Salvar(notaFiscalDb, xml);

                return notaFiscalDb;
            }));
        }