/// <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; }
/// <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; }