public void ExportExcel(string filePath)
        {
            var excelApp            = new OpenXmlApplication(); //container.GetInstance<IExcelDocumentService>();
            var dados               = excelApp.OpenExcelDocument(filePath).ReadExcelDocument <DebitoData>(0, true);
            var minDate             = dados.Select(d => d.Data).Min();
            var lstEstabelecimentos = _dominioRepository.List <Estabelecimento>();
            var extraDatas          = _dominioRepository.FindBy <ClassificacaoExtra>(x => x.DataInicio >= minDate);

            var arquivos = new Dictionary <string, CSVFile>();

            DeleteFolderCSVFiles(filePath);

            foreach (var item in dados)
            {
                var extraData = extraDatas.Where(x => x.DataInicio <= item.Data && x.DataFim >= item.Data).FirstOrDefault();
                var estab     = lstEstabelecimentos.FirstOrDefault(e => Regex.IsMatch(item.Local.Replace("*", string.Empty).ToUpper(), e.PalavraChave.ToUpper().LikeToRegular()));

                if (extraData != null)
                {
                    item.Local = string.Concat(extraData.Prefixo, item.Local);
                }

                if (estab == null)
                {
                    estab = new Estabelecimento {
                        Classificacao = extraData != null ? extraData.Classificacao : new TipoDominio {
                            Descricao = "DESCONHECIDO"
                        }
                    }
                }
                ;

                if (!arquivos.ContainsKey(estab.Classificacao.Descricao))
                {
                    var tmpSb = new CSVFile();

                    arquivos.Add(estab.Classificacao.Descricao, tmpSb);
                }

                var csvData = arquivos[estab.Classificacao.Descricao];
                csvData.AppendLine(item);
            }

            Array.ForEach(arquivos.ToArray(), a => a.Value.Save(Path.Combine(@"c:\tmp", string.Concat(a.Key, ".csv"))));
            excelApp.CloseExcelDocument();
        }
Exemplo n.º 2
0
 public IHttpActionResult Listar()
 {
     return(Ok(_dominioRepository.List().Select(x => new { x.Id, x.Descricao })));
 }
Exemplo n.º 3
0
        public string ExportExcel(string[] filePathSource, DateTime dtRef)
        {
            const int idDesconhecido      = 204;
            var       getDescription      = new Func <TipoDominio, string>(e => string.Concat(e.Id, "-", e.Descricao));
            var       lstEstabelecimentos = _dominioRepository.List <Estabelecimento>().OrderByDescending(e => e.PalavraChave.Length);
            var       tipoDesconhecido    = _dominioRepository.Get <TipoDominio>(idDesconhecido);
            var       arquivos            = new Dictionary <string, List <DebitoData> >();
            var       lancamentos         = new List <Lancamento>();
            var       qtdEstab            = new Dictionary <string, int>();
            var       filePathTarget      = Path.GetTempFileName();

            foreach (var filePath in filePathSource)
            {
                var dados    = _excelDocumentService.OpenExcelDocument(filePath).ReadExcelDocument <DebitoData>(0, true);
                var minDate  = dados.Select(d => d.Data).Min();
                var prefixos = _dominioRepository.FindBy <ClassificacaoExtra>(x => x.DataInicio >= minDate);

                foreach (var item in dados)
                {
                    var            estab          = lstEstabelecimentos.FirstOrDefault(e => Regex.IsMatch(item.Local.Replace("*", string.Empty).ToUpper(), e.PalavraChave.ToUpper().LikeToRegular()));
                    var            prefixoExtra   = prefixos.Where(x => x.DataInicio <= item.Data && x.DataFim >= item.Data).FirstOrDefault();
                    DescricaoExtra descricaoExtra = null;
                    var            lanc           = new Lancamento {
                        Estabelecimento = estab
                    };

                    if (estab != null)
                    {
                        #region Mudando a classificação de uma compra específica na data

                        var estabKey = $"{estab.Id}{item.Data}";
                        if (!qtdEstab.ContainsKey(estabKey))
                        {
                            qtdEstab[estabKey] = 0;
                        }
                        qtdEstab[estabKey] += 1;

                        descricaoExtra = _dominioRepository.FindBy <DescricaoExtra>(x => x.Ativo &&
                                                                                    x.DataCompra == item.Data &&
                                                                                    x.Estabelecimento.Id == estab.Id &&
                                                                                    qtdEstab[estabKey] >= x.IndiceCompraDe && qtdEstab[estabKey] <= x.IndiceCompraAte)
                                         .FirstOrDefault();

                        if (descricaoExtra != null)
                        {
                            item.Local = $"{descricaoExtra.Descricao}-{item.Local}";
                            estab      = new Estabelecimento {
                                Classificacao = descricaoExtra.Classificacao
                            };
                        }

                        #endregion
                    }
                    else
                    {
                        estab = new Estabelecimento {
                            Classificacao = prefixoExtra != null ? prefixoExtra.Classificacao : tipoDesconhecido
                        }
                    };

                    #region Adicionando prefixo por range de data

                    if (prefixoExtra != null)
                    {
                        item.Local = string.Concat(prefixoExtra.Prefixo, item.Local);
                    }

                    #endregion


                    if (!arquivos.ContainsKey(getDescription(estab.Classificacao)))
                    {
                        arquivos.Add(getDescription(estab.Classificacao), new List <DebitoData> {
                            new DebitoData {
                                Local = item.Local, Data = item.Data, Valor = item.Valor
                            }
                        });
                    }
                    else
                    {
                        arquivos[getDescription(estab.Classificacao)].Add(new DebitoData {
                            Local = item.Local, Data = item.Data, Valor = item.Valor
                        });
                    }


                    lanc.Valor              = item.Valor;
                    lanc.Descricao          = item.Local;
                    lanc.DtCompra           = item.Data;
                    lanc.DtReferencia       = new DateTime(dtRef.Year, dtRef.Month, 1);
                    lanc.DescricaoExtra     = descricaoExtra;
                    lanc.ClassificacaoExtra = prefixoExtra;
                    lanc.CriadoEm           = DateTime.Now;
                    lancamentos.Add(lanc);
                }
            }

            _excelDocumentService.WriteExcelDocument(filePathTarget, arquivos);
            _excelDocumentService.CloseExcelDocument();

            _dominioRepository.ApagarLancamentosPorDtRef(dtRef);
            _dominioRepository.Save(lancamentos.AsEnumerable());
            //excelApp.CloseExcelDocument();

            return(filePathTarget);
        }