void DoTheExport(MiscHelpers.TemplateType type) { TreeModel model = treeDebaters.Model; TreeIter iter; if (model.GetIterFirst(out iter)) { try { ITemplate tmpl = MiscHelpers.GetTemplate("debaters", type); ITmplBlock tmplDebaters = tmpl.ParseBlock("DEBATERS"); int n = 0; do { n++; TreeIter storeIter = ConvertModelIterToStoreIter(iter); EditableDebater d = (EditableDebater)store.GetValue(storeIter, 0); tmplDebaters.Assign("NUM", n.ToString()); tmplDebaters.Assign("NAME", d.Name.ToString()); tmplDebaters.Assign("CLUB", d.Club.ToString()); tmplDebaters.Assign("AGE", d.Age.ToString()); tmplDebaters.Assign("ROLE", EscapeString(d.Role.ToString(), type)); tmplDebaters.Assign("BLACKLIST", EscapeString(d.BlackList.ToString(), type)); tmplDebaters.Assign("WHITELIST", EscapeString(d.WhiteList.ToString(), type)); tmplDebaters.Assign("EXTRAINFO", EscapeString(d.ExtraInfo.ToString(), type)); tmplDebaters.Out(); }while(model.IterNext(ref iter)); MiscHelpers.AskShowTemplate(this, "Debaters successfully generated, see " + "pdfs/debaters.(pdf|csv)", MiscHelpers.MakeExportFromTemplate() ); } catch (Exception ex) { MiscHelpers.ShowMessage(this, "Could not export Debaters: " + ex.Message, MessageType.Error); } } }
private void ExportResultsCSV() { const int maxJudgesPerRoom = 4; try { List <RoundData> rounds = Tournament.I.Rounds; var tmpl = MiscHelpers.GetTemplate("round-results", MiscHelpers.TemplateType.CSV); var roomsTmpl = tmpl.ParseBlock("ROOMS"); for (var roundNum = 0; roundNum < rounds.Count; roundNum++) { var round = rounds[roundNum]; foreach (RoomData venue in round.Rooms) { roomsTmpl.Assign("ROUND", roundNum.ToString()); roomsTmpl.Assign("VENUE", venue.RoomName); var judges = venue.Judges; for (var i = 0; i < maxJudgesPerRoom; i++) { var name = judges.Count > i && judges[i] != null ? judges[i].Name.ToString() : ""; roomsTmpl.Assign("JUDGE" + (i + 1), name); } var gov = venue.Gov; var govName = gov == null ? "?" : gov.TeamName; var govPoints = gov == null ? null : GetTeamAveragePoints(roundNum, gov); var govPointsStr = govPoints == null ? "?" : OPDtabData.MiscHelpers.DoubleToStr(govPoints.Value); roomsTmpl.Assign("GOV", govName); roomsTmpl.Assign("GOVRESULT", govPointsStr); var opp = venue.Opp; var oppName = opp == null ? "?" : opp.TeamName; var oppPoints = opp == null ? null : GetTeamAveragePoints(roundNum, opp); var oppPointsStr = oppPoints == null ? "?" : OPDtabData.MiscHelpers.DoubleToStr(oppPoints.Value); roomsTmpl.Assign("OPP", oppName); roomsTmpl.Assign("OPPRESULT", oppPointsStr); var frees = venue.FreeSpeakers; var free1 = frees.Count >= 1 ? frees[0] : null; var free1Name = free1 == null ? "?" : free1.Name.ToString(); var free1Result = free1 == null ? null : GetDebaterAveragePoints(roundNum, free1); var free1ResultStr = free1Result == null ? "?" : OPDtabData.MiscHelpers.DoubleToStr(free1Result.Value); roomsTmpl.Assign("FREE1", free1Name); roomsTmpl.Assign("FREE1RESULT", free1ResultStr); var free2 = frees.Count >= 2 ? frees[1] : null; var free2Name = free2 == null ? "?" : free2.Name.ToString(); var free2Result = free2 == null ? null : GetDebaterAveragePoints(roundNum, free2); var free2ResultStr = free2Result == null ? "?" : OPDtabData.MiscHelpers.DoubleToStr(free2Result.Value); roomsTmpl.Assign("FREE2", free2Name); roomsTmpl.Assign("FREE2RESULT", free2ResultStr); var free3 = frees.Count >= 3 ? frees[2] : null; var free3Name = free3 == null ? "?" : free3.Name.ToString(); var free3Result = free3 == null ? null : GetDebaterAveragePoints(roundNum, free3); var free3ResultStr = free3Result == null ? "?" : OPDtabData.MiscHelpers.DoubleToStr(free3Result.Value); roomsTmpl.Assign("FREE3", free3Name); roomsTmpl.Assign("FREE3RESULT", free3ResultStr); roomsTmpl.Out(); } } MiscHelpers.AskShowTemplate(this, "Results Export successfully generated, see pdfs/round-results.csv.", MiscHelpers.MakeExportFromTemplate() ); } catch (Exception ex) { MiscHelpers.ShowMessage(this, "Could not export Results: " + ex.Message, MessageType.Error); } }
void DoTheExport(MiscHelpers.TemplateType type) { try { ITemplate tmpl = MiscHelpers.GetTemplate("ranking", type); string separator = type == MiscHelpers.TemplateType.PDF ? "+" : "\",\""; ITmplBlock tmplTitle = tmpl.ParseBlock("TITLE"); tmplTitle.Assign("V", Tournament.I.Title); tmplTitle.Out(); ITmplBlock tmplTeams = tmpl.ParseBlock("TEAMS"); int pos = 1; int realPos = 1; foreach (RankingDataItem item in teams) { TeamData td = (TeamData)item.Data; if (!(pos > 1 && teams[pos - 2].TotalPoints == item.TotalPoints)) { realPos = pos; } tmplTeams.Assign("POS", realPos.ToString()); tmplTeams.Assign("NAME", td.TeamName); List <int> speakerPos = new List <int>(3); foreach (RoundDebater rd in td) { int realPos_ = 1; for (int i = 0; i < speakers.Count; i++) { if (!(i > 0 && speakers[i - 1].TotalPoints == speakers[i].TotalPoints)) { realPos_ = i + 1; } if (rd.Equals(speakers[i].Data)) { speakerPos.Add(realPos_); } } } speakerPos.Sort(); ITmplBlock tmplSpeakerPos = tmpl.ParseBlock("SPEAKERPOS"); for (int i = 0; i < speakerPos.Count; i++) { tmplSpeakerPos.Assign("POS", speakerPos[i].ToString()); tmplSpeakerPos.Assign("SEP", i == speakerPos.Count - 1?"":separator); tmplSpeakerPos.Out(); } // we divide the avg by three to make it comparable to team position tmplTeams.Assign("SPEAKERPOSAVG", item.AvgPoints < 0 ? "?" : OPDtabData.MiscHelpers.FmtDecimal(OPDtabData.MiscHelpers.CalcExactAverage(speakerPos) / 3) ); if (mBreakingTeams.Contains(pos - 1)) { tmplTeams.Assign("BREAKMARK", "Break"); } else { tmplTeams.Assign("BREAKMARK", ""); } tmplTeams.Assign("POINTS", OPDtabData.MiscHelpers.DoubleToStr(item.TotalPoints)); ITmplBlock tmplPointsPerRound = tmpl.ParseBlock("POINTSPERROUNDTEAM"); int nPoints = 0; if (item.RoundPoints.Count == 0) { tmplPointsPerRound.Assign("POINTS", "?"); tmplPointsPerRound.Assign("POS", ""); tmplPointsPerRound.Assign("SEP", ""); tmplPointsPerRound.Out(); } else { for (int i = 0; i < item.RoundPoints.Count; i++) { string[] PosToStr = new string[] { "G", "O", "F" }; tmplPointsPerRound.Assign("POINTS", OPDtabData.MiscHelpers.DoubleToStr(item.RoundPoints[i])); tmplPointsPerRound.Assign("POS", PosToStr[(int)RoundResultData.PosToRoleType[item.RoundPositions[i]]]); tmplPointsPerRound.Assign("SEP", i == item.RoundPoints.Count - 1?"":separator); tmplPointsPerRound.Out(); nPoints++; } } if (type == MiscHelpers.TemplateType.CSV) { // in CSV mode pad with more separators for (int i = nPoints; i < Tournament.I.Rounds.Count; i++) { tmplPointsPerRound.Assign("POINTS", ""); tmplPointsPerRound.Assign("SEP", separator); tmplPointsPerRound.Out(); } } tmplTeams.Out(); pos++; } ITmplBlock tmplSpeakers = tmpl.ParseBlock("SPEAKERS"); pos = 1; realPos = 1; foreach (RankingDataItem item in speakers) { RoundDebater rd = (RoundDebater)item.Data; if (!(pos > 1 && speakers[pos - 2].TotalPoints == item.TotalPoints)) { realPos = pos; } tmplSpeakers.Assign("POS", realPos.ToString()); tmplSpeakers.Assign("NAME", rd.Name.FirstName + " " + rd.Name.LastName); tmplSpeakers.Assign("POINTS", OPDtabData.MiscHelpers.DoubleToStr(item.TotalPoints)); if (mTeamSpeakers.Contains(pos - 1)) { tmplSpeakers.Assign("BREAKMARK", "Team"); } else if (mFreeSpeakers.Contains(pos - 1)) { tmplSpeakers.Assign("BREAKMARK", "Tab"); } else if (mBestSpeakers.Contains(pos - 1)) { tmplSpeakers.Assign("BREAKMARK", "Raum"); } else { tmplSpeakers.Assign("BREAKMARK", ""); } tmplSpeakers.Assign("TEAMNAME", rd.Role.TeamName); ITmplBlock tmplPointsPerRound = tmpl.ParseBlock("POINTSPERROUNDSPEAKER"); int nPoints = 0; if (item.Points == null) { tmplPointsPerRound.Assign("POINTS", "?"); tmplPointsPerRound.Assign("POS", ""); tmplPointsPerRound.Assign("SEP", ""); tmplPointsPerRound.Out(); } else { for (int i = 0; i < item.Points.Count; i++) { tmplPointsPerRound.Assign("POINTS", OPDtabData.MiscHelpers.DoubleToStr(item.Points[i])); tmplPointsPerRound.Assign("POS", OPDtabData.MiscHelpers.IntToStr(item.RoundPositions[i] + 1)); tmplPointsPerRound.Assign("SEP", i == item.Points.Count - 1?"":separator); tmplPointsPerRound.Out(); nPoints++; } } if (type == MiscHelpers.TemplateType.CSV) { // in CSV mode pad with more separators for (int i = nPoints; i < Tournament.I.Rounds.Count; i++) { tmplPointsPerRound.Assign("POINTS", ""); tmplPointsPerRound.Assign("POS", ""); tmplPointsPerRound.Assign("SEP", separator); tmplPointsPerRound.Out(); } } tmplSpeakers.Assign("AVERAGEPOINTS", item.AvgPoints < 0 ? "?" : OPDtabData.MiscHelpers.FmtDecimal(item.AvgPoints)); tmplSpeakers.Out(); pos++; } MiscHelpers.AskShowTemplate(this, "Ranking Export successfully generated, see pdfs/ranking.(pdf|csv).", MiscHelpers.MakeExportFromTemplate() ); } catch (Exception ex) { MiscHelpers.ShowMessage(this, "Could not export Ranking: " + ex.Message, MessageType.Error); } }
protected void OnBtnExportRoundDataClicked(object sender, System.EventArgs e) { // the Gtk Warning can be ignored, it's a bug in Gtk... FileChooserDialog dlg = new FileChooserDialog("Choose CSV file", this, FileChooserAction.Save, "Cancel", ResponseType.Cancel, "Save", ResponseType.Accept); dlg.SetCurrentFolder(Directory.GetCurrentDirectory()); TextWriter tw = null; string fileName = null; if (dlg.Run() == (int)ResponseType.Accept) { // try open the file for writing try { fileName = dlg.Filename; dlg.Destroy(); tw = new StreamWriter(fileName); } catch (Exception ex) { MiscHelpers.ShowMessage(this, "Could not open file: " + ex.Message, MessageType.Error); return; } } else { dlg.Destroy(); return; } // get judges and speakers List <Debater> judges = new List <Debater>(); List <Debater> speakers = new List <Debater>(); foreach (Debater d in Tournament.I.Debaters) { if (d.Role.IsJudge) { judges.Add(d); } else if (d.Role.IsTeamMember) { speakers.Add(d); } } judges.Sort(); speakers.Sort(); // write out the header List <string> judgesStr = new List <string>(); foreach (Debater d in judges) { judgesStr.Add(d.Name + " (" + d.Club + ")"); } WriteCSVLine(tw, "Name", "Club", "Team", "Round", "Room", "Position", judgesStr, judgesStr); // for each round, write out all team members and it's results foreach (RoundData rd in Tournament.I.Rounds) { foreach (Debater d in speakers) { // init with null string roomStr = null; string posStr = null; List <string> points = new List <string>(); for (int i = 0; i < 2 * judges.Count; i++) { points.Add(null); } // check if debater was set in this round int roomIdx = d.GetRoomIndex(rd.RoundName); if (roomIdx >= 0) { roomStr = (roomIdx + 1).ToString(); RoundResultData rr = d.RoundResults.Find(delegate(RoundResultData obj) { return(obj.Equals(rd.RoundName)); }); // check if debater has some results if (rr != null) { posStr = rr.GetPosAsString(); // get the judges in the room, determine indices List <int> judgesIndex = new List <int>(); foreach (RoundDebater j in rd.Rooms[roomIdx].Judges) { judgesIndex.Add(judges.FindIndex(delegate(Debater obj) { return(obj.Equals(j)); })); } // check if data makes sense // rr.Role is for speaker only Gov, Opp, Free (Judge is impossible!) if (rr.SpeakerScores.Count != judgesIndex.Count || rr.TeamScores.Count != judgesIndex.Count) { Console.WriteLine("Data for " + d + " inconsistent, skipping."); continue; } // write it in points, doubled size since speaker and team points... for (int i = 0; i < judgesIndex.Count; i++) { points[judgesIndex[i]] = rr.SpeakerScores[i].ToString(); if (rr.Role != RoundResultData.RoleType.Free) { points[judges.Count + judgesIndex[i]] = rr.TeamScores[i].ToString(); } } } } WriteCSVLine(tw, d.Name, d.Club, d.Role, rd.RoundName, roomStr, posStr, points); } } tw.Close(); MiscHelpers.AskShowTemplate(this, "RoundData successfully exported.", fileName); }