public List <EstruturaInconsistenciaIngressoLog> BuscaInconsistenciasIngressoLog() { try { EstruturaInconsistenciaIngressoLog item; List <EstruturaInconsistenciaIngressoLog> retorno = new List <EstruturaInconsistenciaIngressoLog>(); List <EstruturaInconsistenciaIngressoLog> itensAux = new List <EstruturaInconsistenciaIngressoLog>(); //essa tabela tem que ser populada previamente com os dados necessários String query = "SELECT IngressoID,IngressoLogID,AcaoLog,StatusIngresso FROM IngressosLogInconsistencia (NOLOCK)"; bd.Consulta(query); int ingressoIDAtual = 0, ingressoIDAnterior = 0; while (bd.Consulta().Read()) { ingressoIDAtual = bd.LerInt("IngressoID"); //Primeiro popula o objeto aux com todos os logs do ingressoID. Até chegar no próximo ingresso. if (ingressoIDAtual == ingressoIDAnterior || ingressoIDAnterior == 0) { item = new EstruturaInconsistenciaIngressoLog(); item.IngressoID = ingressoIDAtual; item.IngressoLogID = bd.LerInt("IngressoLogID"); item.AcaoLog = Convert.ToChar(bd.LerString("AcaoLog")); item.StatusIngresso = Convert.ToChar(bd.LerString("StatusIngresso")); itensAux.Add(item); } else { //mudou o ingresso: // 1. Verifica as regras // 2. Se tem inconsistencia insere na tabela retorno. // 3. Se não tem passa pro proximo item. if (!ValidaInconsistencia(itensAux)) { retorno.AddRange(itensAux); } //limpa o objeto para passar para o próximo itensAux.Clear(); //Adiciona o item atual item = new EstruturaInconsistenciaIngressoLog(); item.IngressoID = ingressoIDAtual; item.IngressoLogID = bd.LerInt("IngressoLogID"); item.AcaoLog = Convert.ToChar(bd.LerString("AcaoLog")); item.StatusIngresso = Convert.ToChar(bd.LerString("StatusIngresso")); itensAux.Add(item); } ingressoIDAnterior = ingressoIDAtual; } return(retorno); } catch (Exception) { throw; } finally { bd.Fechar(); } }
public List <EstruturaInconsistenciaIngressoLog> BuscaInconsistenciasPrecoID() { List <EstruturaInconsistenciaIngressoLog> retorno = new List <EstruturaInconsistenciaIngressoLog>(); EstruturaInconsistenciaIngressoLog item; List <EstruturaInconsistenciaIngressoLog> itensAux = new List <EstruturaInconsistenciaIngressoLog>(); String query = "SELECT IngressoID,IngressoLogID,Acao,IngressoPreco,LogPreco FROM IngressosLogInconsistenciaPreco (NOLOCK)"; bd.Consulta(query); int ingressoIDAtual = 0, ingressoIDAnterior = 0; while (bd.Consulta().Read()) { ingressoIDAtual = bd.LerInt("IngressoID"); //Primeiro popula o objeto aux com todos os logs do ingressoID. Até chegar no próximo ingresso. if (ingressoIDAtual == ingressoIDAnterior || ingressoIDAnterior == 0) { item = new EstruturaInconsistenciaIngressoLog(); item.IngressoID = ingressoIDAtual; item.IngressoLogID = bd.LerInt("IngressoLogID"); item.AcaoLog = Convert.ToChar(bd.LerString("Acao")); item.IngressoPrecoID = bd.LerInt("IngressoPreco"); item.LogPrecoID = bd.LerInt("LogPreco"); itensAux.Add(item); if (item.AcaoLog == Convert.ToChar(IngressoLog.CANCELAR)) { itensAux.Clear();//Remove todas as ações anteriores a um cancelamento ingressoIDAnterior = 0; } } else { //mudou o ingresso: // 1. Verifica na lista se existe algum preco diferente entre a log e a ingresso // 2. Se tem inconsistencia insere na tabela retorno. // 3. Se não tem passa pro proximo item. foreach (EstruturaInconsistenciaIngressoLog registro in itensAux) { if (registro.IngressoPrecoID != registro.LogPrecoID && (registro.AcaoLog != 'D' && registro.AcaoLog != 'B')) { retorno.AddRange(itensAux); //limpa o objeto para passar para o próximo break; } } itensAux.Clear(); //Adiciona o item atual item = new EstruturaInconsistenciaIngressoLog(); item.IngressoID = ingressoIDAtual; item.IngressoLogID = bd.LerInt("IngressoLogID"); item.AcaoLog = Convert.ToChar(bd.LerString("Acao")); item.IngressoPrecoID = bd.LerInt("IngressoPreco"); item.LogPrecoID = bd.LerInt("LogPreco"); itensAux.Add(item); } ingressoIDAnterior = ingressoIDAtual; } return(retorno); }