Exemplo n.º 1
0
        public static List <Vendedor> ObtenerVendedoresPorFecha(DateTime fecha)
        {
            if (fecha == null)
            {
                fecha = DateTime.Today;
            }

            var vendedoresPresentes = new List <string>();

            try
            {
                using (var connection = new SqlConnection(AccesoDB.SqlPreventa))
                {
                    SqlParameter[] parameters = { new SqlParameter("@pFechaDesde", fecha), new SqlParameter("@pFechaHasta", fecha.AddDays(1)) };
                    var            query      = @"select p.usuario
                       from posiciongps p
                       inner join vendedores v on p.usuario = v.usuario
                       where fecha >= @pFechaDesde and fecha < @pFechaHasta and v.borrado = 0
                       group by p.usuario";
                    var            command    = AccesoDB.CrearComando(connection, query, CommandType.Text, parameters);

                    connection.Open();
                    using (var dr = command.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            vendedoresPresentes.Add(dr.GetString(0));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Error al obtener vendedores. " + ex.Message + "\n\nCtrlVend_ObtenerVendedoresPorFecha");
            }

            var vendedores = new List <Vendedor>();

            foreach (var codigo in vendedoresPresentes)
            {
                var vendedor = ControladorVendedores.ObtenerVendedor(codigo);
                ControladorZonas.CargarZonasDelVendedor(vendedor, fecha);
                vendedores.Add(vendedor);
            }

            return(vendedores);
        }
Exemplo n.º 2
0
        public static void CalcularBultosYPesos(Vendedor vendedor, DateTime fechaDesde, DateTime fechaHasta)
        {
            vendedor.Posiciones.Clear();
            ControladorVendedores.CargarPosiciones(vendedor, fechaDesde, fechaHasta);

            var listaDeClientesVisitados = vendedor.Posiciones.Where(p => p.Cliente != "" && p.Estado == Estado.CHECKOUT_CLIENTE).ToList(); //tomo todos los checkouts donde tengo almacenados los pesos y los bultos
            var listaCodigosRevisados    = new List <string>();                                                                             //almaceno aqui los codigos de los clientes que voy revisando. ocurre que hay veces que se registran mas de una vez el mismo cliente, con cantidades distintas de pesos y bultos. debo tomar siempre el último registro de estos.
            var listaFinalCheckouts      = new List <Posicion>();

            foreach (var item in listaDeClientesVisitados)
            {
                var cliente = item.Cliente;
                if (!listaCodigosRevisados.Contains(cliente)) //verifico que no haya analizado a este cliente aun
                {
                    listaCodigosRevisados.Add(cliente);       //procedo a agregarlo para saltear la proxima ocurrencia en la lista

                    var todosLosRegistrosDeEsteCliente = listaDeClientesVisitados.Where(p => p.Cliente == cliente).ToList();
                    listaFinalCheckouts.Add(todosLosRegistrosDeEsteCliente.OrderByDescending(t => t.Fecha).FirstOrDefault());
                }
                //listaDeClientesVisitados.RemoveAll(p => p.Cliente == cliente);
            }
            vendedor.Pesos  = listaFinalCheckouts.Sum(p => p.PesosCompra);
            vendedor.Bultos = listaFinalCheckouts.Sum(p => p.BultosCompra);
        }