public ItemsViewModel() { Title = "Classificação"; Items = new ObservableCollection <Classificacao>(); Jogadores = new ObservableCollection <Jogador>(); LoadItemsCommand = new Command(async() => { await ExecuteLoadJogadoresCommand(); await ExecuteLoadClassificacaoCommand(); }); MessagingCenter.Subscribe <NewItemPage, Placar>(this, "AddItem", async(obj, item) => { var clas = ((await DataStore.GetItemsAsync(true)) ?? new Classificacao[0]) .OrderBy(a => a.Posicao) .ToArray(); var novoPlacar = item as Placar; var clasJA = clas.FirstOrDefault(a => a.Jogador == novoPlacar.JogadorA.Nome); var clasJB = clas.FirstOrDefault(a => a.Jogador == novoPlacar.JogadorB.Nome); //if (novoPlacar.Regra.Nome == RegrasBusiness.AMISTOSO) //{ // await PlacarDataStore.AddItemAsync(novoPlacar); // return; //} var ultimaPosicao = clas[clas.Length - 1].Posicao; novoPlacar.PosicaoA = (clasJA?.Posicao) ?? (++ultimaPosicao); novoPlacar.PosicaoAntA = (clasJA?.PosicaoAnterior); novoPlacar.PosicaoB = (clasJB?.Posicao) ?? (++ultimaPosicao); novoPlacar.PosicaoAntB = (clasJB?.PosicaoAnterior); await PlacarDataStore.AddItemAsync(novoPlacar); RecalcularClassificacaoAsync(null); }); }
private async void IncluirPlacar(NewItemPage source, Placar placar) { var clas = ((await DataStore.GetItemsAsync(true)) ?? new Classificacao[0]) .OrderBy(a => a.Posicao) .ToArray(); var novoPlacar = placar as Placar; var clasJA = clas.FirstOrDefault(a => a.Jogador == novoPlacar.JogadorA.Nome); var clasJB = clas.FirstOrDefault(a => a.Jogador == novoPlacar.JogadorB.Nome); var ultimaPosicao = clas[clas.Length - 1].Posicao; novoPlacar.PosicaoA = (clasJA?.Posicao) ?? (++ultimaPosicao); novoPlacar.PosicaoAntA = (clasJA?.PosicaoAnterior); novoPlacar.PosicaoB = (clasJB?.Posicao) ?? (++ultimaPosicao); novoPlacar.PosicaoAntB = (clasJB?.PosicaoAnterior); await PlacarDataStore.AddItemAsync(novoPlacar); RecalcularClassificacaoAsync(null); }
public async void RecalcularClassificacaoAsync(Classificacao[] clas = null) { if (clas == null) { clas = (await ClassificacaoInicialStore.GetItemsAsync()) .Select(a => a.Clone()) .OrderBy(a => a.Posicao) .ToArray(); } var placares = (await PlacarDataStore.GetItemsAsync(true)).ToArray(); var busi = new ClassificacaoBusiness(); var classifs = busi.RecalcularClassificacao(clas, placares); var novaLista = classifs.Where(a => a.Excluir == false) .OrderBy(a => a.Posicao) .ToArray(); await DataStore.SaveAll(classifs); await ExecuteLoadClassificacaoCommand(novaLista); }
public async void RecalcularClassificacaoAsync(Classificacao[] clas = null) { var classifs = new List <Classificacao>(); if (clas == null) { clas = (await ClassificacaoInicialStore.GetItemsAsync()) .Select(a => a.Clone()) .OrderBy(a => a.Posicao) .ToArray(); } classifs.AddRange(clas); var ultimaPosicao = clas[clas.Length - 1].Posicao; var placares = (await PlacarDataStore.GetItemsAsync(true)).ToArray(); var dataMaisAntiga = clas.Select(a => a.Data).OrderBy(a => a).First(); placares = placares.Where(a => a.Data >= dataMaisAntiga) .OrderBy(a => a.DataPublicacao) .ToArray(); foreach (var placar in placares) { if (placar.JogadorAGols == null || placar.JogadorBGols == null) { continue; } var clasJogadorA = GetClassificaoJogador(classifs, placar.JogadorA, ref ultimaPosicao); var clasJogadorB = GetClassificaoJogador(classifs, placar.JogadorB, ref ultimaPosicao); var golsA = placar.JogadorAGols ?? 0; var golsB = placar.JogadorBGols ?? 0; clasJogadorA.Alterado = true; clasJogadorB.Alterado = true; if (golsA == golsB) { AtualizarEstatistica(clasJogadorA, 0, 1, 0, golsA, golsB); AtualizarEstatistica(clasJogadorB, 0, 1, 0, golsB, golsA); continue; } else if (golsA > golsB) { AtualizarEstatistica(clasJogadorA, 1, 0, 0, golsA, golsB); AtualizarEstatistica(clasJogadorB, 0, 0, 1, golsB, golsA); } else { AtualizarEstatistica(clasJogadorA, 0, 0, 1, golsA, golsB); AtualizarEstatistica(clasJogadorB, 1, 0, 0, golsB, golsA); } clasJogadorA.Posicao = placar.PosicaoA; clasJogadorA.PosicaoAnterior = placar.PosicaoAntA; clasJogadorB.Posicao = placar.PosicaoB; clasJogadorB.PosicaoAnterior = placar.PosicaoAntB; if (placar.JogadorAGols > placar.JogadorBGols) { AtualizarPosicao(classifs, ultimaPosicao, clasJogadorA, clasJogadorB, placar.Regra); continue; } else { AtualizarPosicao(classifs, ultimaPosicao, clasJogadorB, clasJogadorA, placar.Regra); } } await SalvarAlteracoesAsync(classifs); await ExecuteLoadClassificacaoCommand(classifs.OrderBy(a => a.Posicao) .ToArray()); }