public IActionResult BuscarDatasProcessadasEnviadas(decimal oidContribuinte)
        {
            try
            {
                var datas = new R2010Proxy().BuscarDatasProcessadasOuEnviadas(oidContribuinte).ToList();

                var datasFiltradas = from data in datas
                                     group data by data.Year into g
                                     select new AnoMeses
                {
                    Ano   = g.Key,
                    Meses = (from mes in g
                             group mes by mes.Month into g2
                             select new AnoMes
                    {
                        Ano = g.Key,
                        Mes = g2.Key
                    }).ToList()
                };

                return(Json(datasFiltradas));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        private static void AtualizarR2010(decimal oid, string numRecibo)
        {
            var r2010Proxy = new R2010Proxy();
            var r2010      = r2010Proxy.BuscarPorChave(oid);
            var dataEnvio  = r2010.DTA_ENVIO ?? DateTime.Now;

            new R2010Proxy().UpdateReciboPorOidArquivoUploadCNPJPrestador(numRecibo, dataEnvio, r2010.OID_ARQUIVO_UPLOAD, r2010.COD_CNPJ_PRESTADOR);
        }
        public IActionResult BuscarPrestadores(decimal oidContribuinte)
        {
            try
            {
                var prestadores = new R2010Proxy().BuscarPrestadores(oidContribuinte);

                return(Json(prestadores));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
示例#4
0
        public void GerarR2010(decimal oidUsuario, decimal oidContribuinte, string tipoOperacao, string tipoAmbiente, DateTime dtaInicial, DateTime dtaFinal, string baseCaminhoArquivo)
        {
            var mesesEntreDatas = dtaInicial.MesesEntreDatas(dtaFinal, true);

            //Intervalo intervaloDeDatas = new Intervalo(dtaFinal, dtaInicial, new CalculoAnosMesesDiasAlgoritmo2());

            if (mesesEntreDatas > 1)
            {
                throw new Exception("Período inválido.");
            }

            // Busca Contribuinte
            var contribuinte        = new ContribuinteProxy().BuscarPorChave(oidContribuinte);
            var usuarioContribuinte = new UsuarioContribuinteProxy().BuscarPorOidUsuarioOidContribuinte(oidUsuario, oidContribuinte);

            // Monta nome do arquivo
            var nomeArquivoZip     = "XML_R2010_" + Guid.NewGuid().ToString() + ".zip";
            var arquivoUploadProxy = new ArquivoUploadProxy();

            var oidArquivoUpload = arquivoUploadProxy.Inserir(new ArquivoUploadEntidade
            {
                DTA_UPLOAD               = DateTime.Now,
                IND_STATUS               = DMN_STATUS_EFD_UPLOAD.NAO_PROCESSADO,
                NOM_ARQUIVO_LOCAL        = "Upload/" + nomeArquivoZip,
                NOM_EXT_ARQUIVO          = ".zip",
                NOM_ARQUIVO_ORIGINAL     = nomeArquivoZip,
                NOM_DIRETORIO_LOCAL      = "Upload",
                OID_USUARIO_CONTRIBUINTE = usuarioContribuinte.OID_USUARIO_CONTRIBUINTE
            });

            R2010Proxy proxy2010 = new R2010Proxy();
            IEnumerable <R2010Entidade> listRegistrosR2010;

            switch (tipoOperacao)
            {
            case DMN_EFD_RETIFICADORA.ORIGINAL:
                listRegistrosR2010 = proxy2010.BuscarPorOidContribuinteDtaInicioDtaFimIndSituacaoProcessamento(oidContribuinte, dtaInicial, dtaFinal, DMN_SITUACAO_PROCESSAMENTO.IMPORTADO);
                break;

            case DMN_EFD_RETIFICADORA.RETIFICADORA:
                listRegistrosR2010 = proxy2010.BuscarPorOidContribuinteMesEnvioAnoEnvio(oidContribuinte, dtaInicial.Month, dtaInicial.Year, DMN_SITUACAO_PROCESSAMENTO.IMPORTADO);
                break;

            default:
                throw new Exception("Tipo de operação inválido.");
            }

            if (listRegistrosR2010.Count() == 0)
            {
                throw new Exception("Não existem registros para geração de arquivo XML.");
            }

            var eventos = from x in listRegistrosR2010
                          group x by new { x.DTA_APURACAO.Month, x.DTA_APURACAO.Year, x.COD_CNPJ_PRESTADOR } into g
                select new
            {
                id = string.Format("ID{0}{1}{2:yyyyMMddHHmmss}{3}", contribuinte.IND_TIPO_INSCRICAO, contribuinte.COD_CNPJ_CPF.Substring(0, 8).PadRight(14, '0'), DateTime.Now, g.First().OID_R2010.ToString().PadLeft(5, '0')),
                ind_retificacao          = tipoOperacao,
                dta_apuracao             = string.Format("{0}-{1}", g.Key.Year, g.Key.Month.ToString().PadLeft(2, '0')),
                ind_ambiente_envio       = tipoAmbiente,
                versao                   = Assembly.GetExecutingAssembly().GetName().Version.ToString(3),
                ind_tipo_inscricao       = contribuinte.IND_TIPO_INSCRICAO,
                cod_cnpj_cpf             = contribuinte.COD_CNPJ_CPF.Substring(0, 8),
                cod_insc_estabelecimento = g.First().COD_INSC_ESTABELECIMENTO,
                cod_cnpj_cpf_obra        = g.First().COD_CNPJ_CPF_OBRA,
                ind_obra                 = g.First().IND_OBRA,
                cod_cnpj_prestador       = g.First().COD_CNPJ_PRESTADOR,
                val_total_bruto          = g.Sum(x => x.VAL_BRUTO_NF).ToString().Replace('.', ','),
                val_base_retencao        = g.Sum(x => x.VAL_BASE_RET_SERVICO).ToString().Replace('.', ','),
                val_total_retencao       = g.Sum(x => x.VAL_RETENCAO_SERVICO).ToString().Replace('.', ','),
                ind_cprb                 = g.First().IND_CPRB,
                notas_fiscais            = from y in listRegistrosR2010
                                           where y.DTA_APURACAO.Month == g.Key.Month &&
                                           y.DTA_APURACAO.Year == g.Key.Year &&
                                           y.COD_CNPJ_PRESTADOR == g.Key.COD_CNPJ_PRESTADOR
                                           group y by new { y.NUM_DOCUMENTO_NF } into z
                select new
                {
                    cod_serie_nf         = string.IsNullOrEmpty(z.First().COD_SERIE_NF) ? "1" : z.First().COD_SERIE_NF,
                    num_documento_nf     = z.Key.NUM_DOCUMENTO_NF,
                    dta_emissao_nf       = z.First().DTA_EMISSAO_NF.ToString("yyyy-MM-dd"),
                    val_bruto_nf         = z.First().VAL_BRUTO_NF.ToString().Replace('.', ','),
                    cod_tipo_servico     = z.First().COD_TIPO_SERVICO,
                    val_base_ret_servico = z.First().VAL_BASE_RET_SERVICO.ToString().Replace('.', ','),
                    val_retencao_servico = z.First().VAL_RETENCAO_SERVICO.ToString().Replace('.', ',')
                }
            };

            // Monta XML
            var templateFile = Path.Combine(baseCaminhoArquivo, "../TemplatesXml", "R2010.liquid");
            var template     = Template.Parse(File.OpenText(templateFile).ReadToEnd());
            var xmlR2010     = template.Render(new
            {
                eventos
            });

            var caminhoArquivo = GerarArquivo("R2010_", baseCaminhoArquivo, xmlR2010);

            CompactarArquivo(caminhoArquivo, baseCaminhoArquivo, nomeArquivoZip);

            foreach (var item in listRegistrosR2010)
            {
                item.IND_AMBIENTE_ENVIO         = tipoAmbiente;
                item.IND_RETIFICACAO            = tipoOperacao;
                item.IND_SITUACAO_PROCESSAMENTO = DMN_SITUACAO_PROCESSAMENTO.PROCESSADO;
                item.OID_ARQUIVO_UPLOAD         = oidArquivoUpload;
                item.OID_USUARIO_ENVIO          = oidUsuario;

                proxy2010.Atualizar(item);
            }
        }