Example #1
0
        public override bool Equals(object obj)
        {
            IdentificacaoVenda identificacao = obj as IdentificacaoVenda;

            return(this.DataVenda.Date == identificacao.DataVenda.Date &&
                   this.CPF_CNPJ == identificacao.CPF_CNPJ);
        }
Example #2
0
        //[TestMethod]
        //public void InserirVendasGarantia_Ok()
        //{
        //    var sqlSelect = @"SELECT [Nome]
        //                  ,[Identificacao]
        //                  ,[TipoPessoa]
        //                  ,[Sexo]
        //                  ,[TicketMedio]
        //                  ,[UltimaVenda]
        //                  ,[ValorTotalAgrupado]
        //                  ,[DataVenda]
        //                  ,[IdNFAgrupado]
        //                  ,[Veiculo]
        //                  ,[Ano]
        //                  ,[Placa]
        //                  ,[Km]
        //                  ,[FaixaAno]
        //                  ,[FaixaTicketMedio]
        //                  ,[TipoServico]
        //                  ,[NomeServico]
        //                  ,[Funcionario]
        //                  ,[ValorTotalServico]
        //                  ,[ValorTotalPecas]
        //              FROM
        //                   [dbo].[VendasAgrupadas]";

        //    var vendasAgrupadas = _db.Query<VendaAgrupada>(sqlSelect).ToList();

        //    Dictionary<long, Cliente> dicVendas = new Dictionary<long, Cliente>();
        //    List<VendaAtrasada> vendasAtrasadas = new List<VendaAtrasada>();
        //    foreach (VendaAgrupada venda in vendasAgrupadas)
        //    {
        //        if (dicVendas.ContainsKey(venda.Identificacao))
        //            dicVendas[venda.Identificacao].ListaVendas.Add(venda);
        //        else
        //        {
        //            Cliente cliente = new Cliente
        //            {
        //                FaixaTicketMedio = venda.FaixaTicketMedio,
        //                Indentificacao = venda.Identificacao,
        //                Nome = venda.Nome,
        //                Sexo = venda.Sexo,
        //                TicketMedio = venda.TicketMedio,
        //                TipoPessoa = venda.TipoPessoa,
        //                UltimaVenda = venda.UltimaVenda
        //            };
        //            dicVendas.Add(venda.Identificacao, cliente);
        //            dicVendas[cliente.Indentificacao].ListaVendas.Add(venda);
        //        }
        //    }

        //    foreach (Cliente cliente in dicVendas.Values)
        //    {
        //        DateTime vendaAnterior = cliente.ListaVendas[0].DataVenda;
        //        bool isFirst = true;
        //        foreach (VendaAgrupada venda in cliente.ListaVendas)
        //        {
        //            int dias = (venda.DataVenda - vendaAnterior).Days;
        //            if (dias < 7 && !isFirst)
        //                vendasAtrasadas.Add(new VendaAtrasada(venda));
        //            isFirst = false;
        //        }
        //    }

        //    var sqlInsert = @"INSERT INTO[dbo].[VendasAtrasadas]
        //                                  ([Nome]
        //                                  ,[Identificacao]
        //                                  ,[UltimaVenda]
        //                                  ,[TicketMedio]
        //                                  ,[TipoPessoa]
        //                                  ,[Sexo]
        //                                  ,[Veiculo]
        //                                  ,[Placa]
        //                                  ,[Ano]
        //                                  ,[Km]
        //                                  ,[FaixaAno]
        //                                  ,[FaixaTicketMedio])
        //                            VALUES
        //                                  (@Nome
        //                                   ,@Identificacao
        //                                   ,@UltimaVenda
        //                                   ,@TicketMedio
        //                                   ,@TipoPessoa
        //                                   ,@Sexo
        //                                   ,@Veiculo
        //                                   ,@Placa
        //                                   ,@Ano
        //                                   ,@Km
        //                                   ,@FaixaAno
        //                                   ,@FaixaTicketMedio)";

        //    using (var connection = new SqlConnection(CONNECTION_STRING))
        //    {
        //        var affectedRows = connection.Execute(sqlInsert, vendasAtrasadas);

        //        Console.WriteLine($"Affected Rows: {affectedRows}");
        //    }
        //}
        private List <VendaAgrupada> AgruparVendas(IEnumerable <VendaSeparada> vendasSeparadas)
        {
            var vendasAgrupadas = new Dictionary <IdentificacaoVenda, VendaAgrupada>();

            foreach (var item in vendasSeparadas)
            {
                var id = new IdentificacaoVenda {
                    DataVenda = item.DataVenda, CPF_CNPJ = item.Identificacao
                };

                if (!vendasAgrupadas.ContainsKey(id))
                {
                    VendaAgrupada vendaAgrupada = new VendaAgrupada();

                    vendaAgrupada.Nome             = item.Nome;
                    vendaAgrupada.Identificacao    = item.Identificacao;
                    vendaAgrupada.TipoPessoa       = item.TipoPessoa;
                    vendaAgrupada.Sexo             = item.Sexo;
                    vendaAgrupada.Telefone         = item.Telefone;
                    vendaAgrupada.TicketMedio      = item.TicketMedio;
                    vendaAgrupada.UltimaVenda      = item.UltimaVenda;
                    vendaAgrupada.DataVenda        = item.DataVenda;
                    vendaAgrupada.DataVendaAno     = item.DataVenda.Year;
                    vendaAgrupada.DataVendaMes     = item.DataVenda.Month;
                    vendaAgrupada.DataVendaDia     = item.DataVenda.Day;
                    vendaAgrupada.Veiculo          = item.Veiculo;
                    vendaAgrupada.Ano              = item.Ano;
                    vendaAgrupada.Placa            = item.Placa;
                    vendaAgrupada.Km               = item.Km;
                    vendaAgrupada.FaixaAno         = item.FaixaAno;
                    vendaAgrupada.FaixaTicketMedio = item.FaixaTicketMedio;
                    if (String.IsNullOrEmpty(item.TipoServico) == false)
                    {
                        vendaAgrupada.TipoServico = item.TipoServico;
                    }
                    if (String.IsNullOrEmpty(item.NomeServico) == false)
                    {
                        vendaAgrupada.NomeServico = item.NomeServico;
                    }
                    if (item.ValorTotalServico > 0)
                    {
                        vendaAgrupada.ValorTotalServico = item.ValorTotalServico;
                    }
                    if (item.ValorItens > 0)
                    {
                        vendaAgrupada.ValorTotalPecas = item.ValorItens;
                    }
                    if (String.IsNullOrEmpty(item.Funcionario) == false)
                    {
                        vendaAgrupada.Funcionario = item.Funcionario;
                    }
                    if (String.IsNullOrEmpty(item.FormaPagto) == false)
                    {
                        vendaAgrupada.FormaPagto = item.FormaPagto;
                    }
                    if (String.IsNullOrEmpty(item.CondPagto) == false)
                    {
                        vendaAgrupada.CondPagto = item.CondPagto;
                    }

                    vendaAgrupada.AdicionarValorTotal(item.ValorTotal);
                    vendaAgrupada.AdicionarIdNF(item.IdNF);
                    vendasAgrupadas.Add(id, vendaAgrupada);
                }
                else
                {
                    var vendaAgrupada = vendasAgrupadas[id];

                    vendaAgrupada.AdicionarValorTotal(item.ValorTotal);

                    vendaAgrupada.AdicionarIdNF(item.IdNF);

                    if (String.IsNullOrEmpty(item.TipoServico) == false)
                    {
                        vendaAgrupada.TipoServico = item.TipoServico;
                    }
                    if (String.IsNullOrEmpty(item.NomeServico) == false)
                    {
                        vendaAgrupada.NomeServico = item.NomeServico;
                    }
                    if (item.ValorTotalServico > 0)
                    {
                        vendaAgrupada.ValorTotalServico = item.ValorTotalServico;
                    }
                    if (item.ValorItens > 0)
                    {
                        vendaAgrupada.ValorTotalPecas = item.ValorItens;
                    }
                    if (String.IsNullOrEmpty(item.Funcionario) == false)
                    {
                        vendaAgrupada.Funcionario = item.Funcionario;
                    }
                    if (String.IsNullOrEmpty(item.FormaPagto) == false)
                    {
                        vendaAgrupada.FormaPagto = item.FormaPagto;
                    }
                    if (String.IsNullOrEmpty(item.CondPagto) == false)
                    {
                        vendaAgrupada.CondPagto = item.CondPagto;
                    }
                }
            }

            foreach (IdentificacaoVenda identificacao in vendasAgrupadas.Keys)
            {
                List <KeyValuePair <IdentificacaoVenda, VendaAgrupada> > vendas = vendasAgrupadas.Where(x => x.Key.CPF_CNPJ == identificacao.CPF_CNPJ).ToList();

                decimal  valorTotal  = 0;
                DateTime ultimaVenda = DateTime.MinValue;
                foreach (KeyValuePair <IdentificacaoVenda, VendaAgrupada> venda in vendas)
                {
                    valorTotal = valorTotal + venda.Value.ValorTotalAgrupado;
                    if (ultimaVenda < venda.Key.DataVenda)
                    {
                        ultimaVenda = venda.Key.DataVenda;
                    }
                }

                vendasAgrupadas[identificacao].TicketMedio = valorTotal / vendas.Count;
                vendasAgrupadas[identificacao].ClassificarTicketMedio();
                vendasAgrupadas[identificacao].UltimaVenda = ultimaVenda;
            }
            return(vendasAgrupadas.Values.OrderBy(x => x.DataVenda).ToList());
        }