예제 #1
0
        public IHttpActionResult Incluir([FromBody] DescricaoExtraModel body)
        {
            var descricaoExtra = new DescricaoExtra
            {
                Estabelecimento = _dominioRepository.Get <Estabelecimento>(body.Estabelecimento.Id),
                Classificacao   = _dominioRepository.Get <TipoDominio>(body.Classificacao.Id),
                DataCompra      = body.DataCompra,
                Ativo           = true,
                IndiceCompraDe  = body.IndiceCompraDe,
                IndiceCompraAte = body.IndiceCompraAte,
                Descricao       = body.Descricao
            };

            _dominioRepository.Save(descricaoExtra);

            return(Ok());
        }
예제 #2
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);
        }