public bool Equals(StatistiquesPerso other) { if (this.Pseudo == other.Pseudo && this.DateEntrainement == other.DateEntrainement) { return(true); } else { return(false); } }
private void dgResult_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { if (dgResult.SelectedItem != null) { StatistiquesPerso sp = (StatistiquesPerso)dgResult.SelectedItem; try { LoadStatsParJoueur(sp.Pseudo); } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
public void LoadData() { if (lstGames.SelectedItems.Count == 0) { return; } List <StatistiquesPerso> lstPerso = new List <StatistiquesPerso>(); #region partie // on créer une liste de parties List <IGrouping <DateTime, ScoreCard> > lstGroupScores = new List <IGrouping <DateTime, ScoreCard> >(); foreach (IGrouping <string, ScoreCard> entrainement in lstEntrainement.SelectedItems) { foreach (var partie in entrainement.GroupBy(g => g.dt)) { lstGroupScores.Add(partie); } } List <Partie> lstParties = GenerateParties(lstGroupScores); #endregion // dans lstParties, j'ai une liste de toutes les parties des entrainements selectionnées. // je dois enlever les parties non selectionnable : // par type de partie : lstParties = lstParties.Where(p => cmbTypePartie.SelectedItems.Contains(p.type)).ToList(); // TODO : par joueur présent ? // on fait une liste des fiches de scores pour remplir la grille principale // c'est a dire toutes les fiches de lstParties pour lequelles la date est selectionnée dans lstGames List <ScoreCard> lstTravail = new List <ScoreCard>(); foreach (Partie p in lstParties) { foreach (var item in lstGames.SelectedItems) { IGrouping <DateTime, ScoreCard> group = (IGrouping <DateTime, ScoreCard>)item; lstTravail.AddRange(p.lstScores.Where(x => x.dt == group.Key).ToList()); } //lstTravail.AddRange(p.lstScores.Where(x => lstGames.SelectedItems.Contains(x)).ToList()); } // liste des stats perso (en fonction du mode) // en mode global, une stat par joueur // en mode non global, une stat par joueur et par entrainement IEnumerable <IGrouping <object, ScoreCard> > query; if (IsModeGlobal) { query = lstTravail.GroupBy(q => q.pseudo); } else { // on fait un groupement par date d'entrainement de toutes les fiches query = lstTravail.GroupBy(q => new { q.pseudo, q.dt.Year, q.dt.Month, q.dt.Day }); } foreach (var group in query.ToList()) { lstPerso.Add(new StatistiquesPerso(group.ToList())); } // on compte le nombre de victoires... on considère la partie complète dans le cas de la selection d'une seule manche foreach (Partie g in lstParties) { // on ne doit prendre que les parties pour lesquelles on a selectionner au moins une manche dans lstGames bool ok = false; foreach (ScoreCard sc in lstTravail) { foreach (ScoreCard sc2 in g.lstScores) { if (sc2 == sc) { ok = true; break; } } } if (ok) { try { // cette partie compte dans les stats, on doit donc mettre a jour le nombre de parties jouée par chaque joueur présent List <string> lst = g.lstScores.Select(p => p.pseudo).Distinct().ToList(); foreach (string nom in lst) { // en mode non global, ajouter la date de l'entrainement pour retrouver la stat correspondante StatistiquesPerso perso = lstPerso.Where(q => q.Pseudo == nom).First(); perso.nbParties++; lstPerso[lstPerso.IndexOf(perso)] = perso; } lst = g.getWinners(); if (lst != null) { foreach (string nom in lst) { StatistiquesPerso perso = lstPerso.Where(q => q.Pseudo == nom).First(); perso.nbVictoire++; lstPerso[lstPerso.IndexOf(perso)] = perso; } if (g.type == "Chieur") { string chieur = g.getChieur(); StatistiquesPerso per = lstPerso.Where(q => q.Pseudo == chieur).First(); // TODO : si chieur et score + tir a 0, on ne compte pas la partie dans la moyenne int nbManchesNulles = g.lstScores.Where(p => p.pseudo == chieur && p.score == 0 && p.tirs == 0).Count(); if (nbManchesNulles > 0) { per.RankAdjust(g.lstScores.Where(p => p.pseudo == chieur && p.score == 0 && p.tirs == 0).Sum(p => p.rank)); per.nbMancheObservateur += nbManchesNulles; per.nbObservateur++; } else { per.nbChieur++; } lstPerso[lstPerso.IndexOf(per)] = per; } } } catch (Exception ex) { MessageBox.Show("Erreur avec la selection : " + ex.Message); } } } // ici j'ai : // dans lstTravail l'ensemble des scorecards selectionnées lstScoreCardSelect = lstTravail; lstPartieSelect = lstParties; // dans lstParties l'ensemble des parties avec au moins une manche selectionnées // dans lstPerso les statistiques persos pour les scorecards selectionnées dgResult.ItemsSource = lstPerso; //LoadStatsParJoueur(); #region stats pack Dictionary <int, StatistiquePack> dicoPack = new Dictionary <int, StatistiquePack>(); foreach (ScoreCard sc in lstScoreCardSelect) { StatistiquePack sp = new StatistiquePack(); if (dicoPack.ContainsKey(sc.pack)) { sp = dicoPack[sc.pack]; } else { dicoPack.Add(sc.pack, sp); } sp.packId = sc.pack; sp.nbGames++; sp.score += sc.score; foreach (LigneScore l in sc.Up) { sp.frontplus += l.front; sp.backplus += l.back; sp.shdplus += l.shoulder; sp.gunplus += l.gun; } foreach (LigneScore l in sc.Down) { sp.frontmoins += l.front; sp.backmoins += l.back; sp.shdmoins += l.shoulder; sp.gunmoins += l.gun; } } dgPack.ItemsSource = dicoPack.Values; #endregion }