Esempio n. 1
0
        /// <summary>
        /// Rastrea mercadoria em todos os estoques de consignado.
        /// </summary>
        public List<RastroConsignado> RastrearConsignado()
        {
            IDbConnection conexão = Conexão;
            List<RastroConsignado> resultado = new List<RastroConsignado>();

            lock (conexão)
            {
                using (IDbCommand cmd = conexão.CreateCommand())
                {
                    cmd.CommandText = "SELECT p.codigo, p.nome, a.previsao, SUM(si.quantidade) - ifnull(rastreamentovenda.qtd,0) - ifnull(rastreamentoretorno.qtd,0) " + 
                         " FROM saida s JOIN saidaitem si ON s.codigo = si.saida JOIN acertoconsignado a ON a.codigo = s.acerto " + 
                         " JOIN pessoa p ON p.codigo = a.cliente " + 
                         
                         " left join  " + 
                         " ( SELECT p.codigo, SUM(vi.quantidade) as qtd " + 
                         " FROM venda v JOIN vendaitem vi ON v.codigo = vi.venda JOIN acertoconsignado a ON a.codigo = v.acerto " + 
                         " JOIN pessoa p ON p.codigo = a.cliente " + 
                         " WHERE a.dataEfetiva IS NULL  " + 
                         " and referencia= " + DbTransformar(ReferênciaNumérica) + 
                         " GROUP BY p.codigo " + 
                         " ) " + 
                         " rastreamentovenda on p.codigo=rastreamentovenda.codigo " + 
                         
                         " left join " + 
                         " ( " + 
                         " SELECT p.codigo, SUM(ri.quantidade) as qtd " + 
                         " FROM retorno r JOIN retornoitem ri ON r.codigo = ri.retorno JOIN acertoconsignado a ON a.codigo = r.acerto " + 
                         " JOIN pessoa p ON p.codigo = a.cliente " + 
                         " WHERE a.dataEfetiva IS NULL  " +
                         " and referencia=" + DbTransformar(ReferênciaNumérica) + 
                         " GROUP BY p.codigo " + 
                         " ) rastreamentoretorno on p.codigo=rastreamentoretorno.codigo " + 
                         
                         " WHERE a.dataEfetiva IS NULL  " +
                         " and referencia=" + DbTransformar(ReferênciaNumérica) + 

                         " GROUP BY p.codigo " + 
                         " ORDER BY SUM(si.quantidade) desc";

                    using (IDataReader leitor = cmd.ExecuteReader())
                    {
                        try
                        {
                            while (leitor.Read())
                            {
                                RastroConsignado rastro = new RastroConsignado();

                                rastro.ReferênciaNumérica = ReferênciaNumérica;
                                rastro.Pessoa = new Entidades.Pessoa.PessoaCódigoNome(
                                    Convert.ToUInt64(leitor.GetValue(0)),
                                    leitor.GetString(1));
                                rastro.Devolução = leitor.IsDBNull(2) ? (DateTime?)null : (DateTime?)leitor.GetDateTime(2);
                                rastro.Quantidade = leitor.GetInt32(3);

                                resultado.Add(rastro);
                            }
                        }
                        finally
                        {
                            leitor.Close();
                        }
                    }
                }
            }

            return resultado;
        }
Esempio n. 2
0
        /// <summary>
        /// Obtém rastreamento de todas as mercadorias.
        /// Dado uma referência, retorna o seu rastro.
        /// </summary>
        /// <returns></returns>
        public static Dictionary<string, List<RastroConsignado>> ObterRastreamento()
        {
            Dictionary<string, List<RastroConsignado>> hash = new Dictionary<string, List<RastroConsignado>>(StringComparer.Ordinal);

            IDbConnection conexão = Conexão;
            List<RastroConsignado> resultado = new List<RastroConsignado>();

            lock (conexão)
            {
                using (IDbCommand cmd = conexão.CreateCommand())
                {
                    // A consulta demora aprox. 30 segundos.
                    cmd.CommandTimeout = 120;

                    cmd.CommandText = "SELECT p.codigo, p.nome, a.previsao, SUM(si.quantidade) - ifnull(rastreamentovenda.qtd,0) - ifnull(rastreamentoretorno.qtd,0) as saldo, si.referencia " +
                         " FROM saida s JOIN saidaitem si ON s.codigo = si.saida JOIN acertoconsignado a ON a.codigo = s.acerto " +
                         " JOIN pessoa p ON p.codigo = a.cliente " +
                         " left join " +
                         " ( SELECT p.codigo, SUM(vi.quantidade) as qtd, referencia " +
                         " FROM venda v JOIN vendaitem vi ON v.codigo = vi.venda JOIN acertoconsignado a ON a.codigo = v.acerto " +
                         " JOIN pessoa p ON p.codigo = a.cliente " +
                         " WHERE a.dataEfetiva IS NULL " +
                         " GROUP BY p.codigo, vi.referencia " +
                         " ) " +
                         " rastreamentovenda on p.codigo=rastreamentovenda.codigo " +
                         " and si.referencia=rastreamentovenda.referencia " +

                         " left join " +
                         " ( " +
                         " SELECT p.codigo, SUM(ri.quantidade) as qtd, referencia " +
                         " FROM retorno r JOIN retornoitem ri ON r.codigo = ri.retorno JOIN acertoconsignado a ON a.codigo = r.acerto " +
                         " JOIN pessoa p ON p.codigo = a.cliente " +
                         " WHERE a.dataEfetiva IS NULL " +
                         " GROUP BY p.codigo, ri.referencia " +
                         " ) rastreamentoretorno on p.codigo=rastreamentoretorno.codigo " +
                         " and si.referencia=rastreamentoretorno.referencia " +

                         " WHERE a.dataEfetiva IS NULL " +
                         " GROUP BY p.codigo, si.referencia, a.previsao " +
                         " HAVING saldo > 0 " + 
                         " ORDER BY SUM(si.quantidade) desc ";

                    using (IDataReader leitor = cmd.ExecuteReader())
                    {
                        try
                        {
                            while (leitor.Read())
                            {
                                RastroConsignado rastro = new RastroConsignado();

                                rastro.ReferênciaNumérica = leitor.GetString(4);

                                rastro.Pessoa = new Entidades.Pessoa.PessoaCódigoNome(
                                    Convert.ToUInt64(leitor.GetValue(0)),
                                    leitor.GetString(1));
                                rastro.Devolução = leitor.IsDBNull(2) ? (DateTime?)null : (DateTime?)leitor.GetDateTime(2);
                                rastro.Quantidade = leitor.GetInt32(3);

                                // Procura uma lista para adicionar o rastro nela.
                                List<RastroConsignado> lista = null;
                                if (!hash.TryGetValue(rastro.ReferênciaNumérica, out lista))
                                {
                                    lista = new List<RastroConsignado>();
                                    hash[rastro.ReferênciaNumérica] = lista;
                                }

                                lista.Add(rastro);
                            }
                        }
                        finally
                        {
                            leitor.Close();
                        }
                    }
                }
            }

            return hash;
        }