public Response OrganizeSecondStage() { Response response = new Response(); int half; int totalSpaces = 0; //Pelo menos metade das pessoas de cada sala deve trocar de sala, para estimular a troca de informações //pegar quantidade total de salas de treinamento e colocar em uma listSpaces SpaceTrainingBLL spaceBLL = new SpaceTrainingBLL(); QueryResponse <SpaceTraining> r1 = spaceBLL.GetAllList(); List <SpaceTraining> listSpaces = r1.Data; if (listSpaces.Count > 0) { //foreach que percorre a listSpaces foreach (SpaceTraining spaceNow in listSpaces) { //atualizar quantidade de salas totalSpaces++; //pegar a lista de pessoas que foi destinada a fazer a primeira etapa nesta sala e colocar em uma listPersons QueryResponse <Person> r2 = this.GetPeopleByStage1ID(spaceNow); List <Person> listPersons = r2.Data; //contar quantas pessoas tem na listPersons Response r3 = listPersons.Count.ToString().IsPair(); //se for par if (r3.Success) { //definir metade de pessoas a serem excluidas da lista, o que restar será trocada de sala half = (listPersons.Count / 2); } //se for ímpar else { //definir metade acrescentando +1 e divindo por 2, assim não teremos número quebrado e estarei trocando pelo menos metade da sala half = (listPersons.Count - 1) / 2; } //excluir um total de half da listPersons, o que sobrar receberá o novo ID da etapa 2 for (int i = 1; i <= half; i++) { foreach (Person p in listPersons) { listPersons.Remove(p); break; } } //verificar se existe uma próxima sala depois desta if (totalSpaces < listSpaces.Count) { //se cair aqui, existe outra sala depois desta, fazer foreach que percorre a newListPerson e inserir no STAGE2ID: spaceNow.ID + 1 foreach (Person p in listPersons.ToList()) { int newID = spaceNow.ID + 1; //chamar método que insere o ID no STAGE2ID informando newID Response r4 = personDAL.UpdateStage2IDInformingInt(newID, p); listPersons.Remove(p); } } else { //se cair aqui, esta é a última sala existente, inserir ID da primeira sala da listSpace //fazer foreach que percorrerá a primeira sala da listSpace para pegar o ID dela, e depois disso deverá sair do foreach, pois eu quero apenas a primeira sala foreach (SpaceTraining firstSpace in listSpaces) { foreach (Person p in listPersons.ToList()) { int newID = firstSpace.ID; Response r5 = personDAL.UpdateStage2IDInformingInt(newID, p); listPersons.Remove(p); } break; } } } response.Success = true; response.Message = "Dados inseridos com sucesso."; return(response); } else { response.Success = false; response.Message = "Não existem salas cadastradas."; return(response); } }
public Response OrganizeFirstStage() { Response response = new Response(); // aqui está a distribuição de pessoas nas salas para primeira etapa SpaceTrainingBLL spaceBLL = new SpaceTrainingBLL(); //lista de todas as pessoas QueryResponse <Person> r3 = this.GetAllList(); List <Person> listPersons = r3.Data; if (listPersons.Count > 0) { //lista e contagem de todas as salas de treinamento QueryResponse <SpaceTraining> r4 = spaceBLL.GetAllList(); List <SpaceTraining> listSpaces = r4.Data; if (listSpaces.Count > 0) { // >>>> executa a partir de agora distribuição de pessoas para etapa 1 foreach (SpaceTraining s in listSpaces) { //pegar capacidade total desta sala maxCapacity SingleResponse <SpaceTraining> r0 = spaceBLL.Get(s); int final = r0.Data.MaxCapacity; for (int i = 1; i <= final; i++) { foreach (Person p in listPersons) { Response r5 = this.UpdateStage1ID(s, p); Response r6 = this.UpdateStage2ID(s, p); listPersons.Remove(p); break; } if (listPersons.Count == 0) { break; } } if (listSpaces.Count == 0) { break; } } response.Success = true; response.Message = "Dados inseridos com sucesso."; return(response); } else { response.Success = false; response.Message = "Não há salas cacastradas."; return(response); } } else { response.Success = false; response.Message = "Não há pessoas cadastradas."; return(response); } }